JPA найти последнюю запись

Я хотел бы знать, что лучший способ получить последнюю запись таблицы с JPA. В Sql то, что я ищу, будет следующим:

select id from table order by id desc limit 1 

Я думал о model.count(), но это звучит скорее как взломать, чем хорошее решение;)

Ответ 1

Вы можете использовать JPQL query который очень похож на ваш запрос.

select t from JpaClass t order by t.id desc

После того, как вы установили Query object вы можете вызвать

query.getSingleResult() or call query.setMaxResults(1)

с последующим

query.getResultList()

РЕДАКТИРОВАТЬ: Моя ошибка: пожалуйста, обратите внимание на комментарий mtpettyp ниже.

Не используйте query.getSingleResult(), так как исключение может быть выдано, если не одна возвращенная строка - см. Java.sun.com/javaee/5/…() - mtpettyp

Перейти с setMaxResults и getResultList.

query.setMaxResults(1).getResultList();

Ответ 2

Результаты запросов могут быть ограничены ключевыми словами сначала или top, которые можно использовать взаимозаменяемо. Дополнительное числовое значение может быть добавлено в верхний/первый, чтобы указать максимальный размер результата, который будет возвращен. Если число не указано, предполагается, что размер результата равен 1.

JpaClass findFirstByOrderByIdDesc();

на который ссылается Spring Data JPA docs

Ответ 3

Для пользователей, которые решили использовать entityManager, попробуйте это:

public List<T> findNRows(int n){
        return entityManager.createQuery("from "+entityClass.getSimpleName()+" ORDER BY id DESC",entityClass).setMaxResults(n).getResultList();
}