Выполняет ли вызов 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();
Затем сравните эту переменную, а не команду.