Выполняет ли вызов getResultList() для javax.persistence.Query запрос дважды?

Когда у меня есть javax.persistence.Query, что я ожидаю List Я всегда проверяю, чтобы убедиться, что List имеет размер больше 1 до возврата любых значений. например

Query q = em.createQuery(sql);

if(q.getResultList().size()<1)
        {
            return new ArrayList();
        }
        else
        {
            return q.getResultList();
        }

Мне интересно, если когда я проверяю размер и когда я возвращаю результат, если запрос выполняется дважды.

2 ответа

Решение

getResultList() выполняет запрос, как говорят документы.

Сделайте это вместо этого:

List results = q.getResultList();
if (results.size() == 0) {
    return Collections.emptyList();
} else {
    return results;
}

Конечно, если это TypedQuery, вы должны добавить часть обобщения. Рекомендуется возвращать неизменяемый пустой список из запросов без записей результатов.

Если q.getResultList(); это фактический запрос, то да.

Перед сравнением я бы сохранил его в переменной List storeHere = q.getResultList();

Затем сравните эту переменную, а не команду.

Другие вопросы по тегам