2014-10-07 2 views
0

Я нахожу this нить очень полезной, но похоже, что реализация в советах не очень эффективна из-за характера JPA.найти последнюю запись JPA

Я ищу решение для получения последней записи о присоединении к запросу с группировкой, реализуемой JPA, поэтому это не простая работа. Моя реализация ставится «ORDER BY time DESC» в конце и забрать первый из коллекции возврата, вместо использования функции MAX(), которая также должна ввести подзапрос, но мне интересно, это хорошая альтернатива?

Это сложный запрос я сделал на примере из другого примера:

"SELECT oo FROM Order AS oo WHERE oo.id IN " + 
    "(SELECT temp.id FROM " + 
     "(SELECT t.order.id AS id, MAX(t.order.orderTime) AS ordTime FROM Transaction t " + 
     "WHERE t.order.name= :name " + 
     "GROUP BY t.order.name) AS temp" + 
    ")"; 

Это вопрос, который я думаю, что может быть хорошей альтернативой, но не уверен:

String query = "SELECT t.order FROM Transaction AS t " + 
    " WHERE t.order.name= :name " + 
    " ORDER BY t.order.orderTime DESC"; 

// and simply just pick up the 1st as the latest entry from result: 
Order order = em.createQueryquery , Order .class).getResultList().get(0); 
+1

проверка пустого списка была бы хорошей идеей –

+0

@Denis Tulskiy Will do :) Считаете ли вы, что это хорошая практика, чтобы найти последнюю запись вместо того, чтобы поместить все в JPQL? Я задумываюсь о том, что 'ORDER BY DESC' должен быть надежным – Dreamer

ответ

2

Проблема с вашим решением заключается в том, что он загрузит ВСЕ записи в списке, чтобы вы могли его выбрать. Согласно this ответьте, вам нужно ограничить результат до 1, позвонив по номеру query.setMaxResults(1). Помимо этого, это идеальное решение. Вы также можете использовать query.getSingleResult() для получения единого объекта, но остерегайтесь NoResultException, если таких записей нет.

+0

Хорошая идея. большие пальцы вверх для хорошего ответа! – Dreamer

Смежные вопросы