【发布时间】:2011-01-04 21:17:35
【问题描述】:
我想知道使用 JPA 获取表的最后一个条目的最佳方法是什么。 在 Sql 中,我正在寻找的是:
select id from table order by id desc limit 1
我在考虑 model.count() 但这听起来更像是一个 hack,而不是一个好的解决方案;)
【问题讨论】:
我想知道使用 JPA 获取表的最后一个条目的最佳方法是什么。 在 Sql 中,我正在寻找的是:
select id from table order by id desc limit 1
我在考虑 model.count() 但这听起来更像是一个 hack,而不是一个好的解决方案;)
【问题讨论】:
您可以使用与您的查询非常相似的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();
【讨论】:
查询方法的结果可以通过关键字first或top来限制,可以互换使用。可以将可选数值附加到 top/first 以指定要返回的最大结果大小。如果省略数字,则假定结果大小为 1。
JpaClass findFirstByOrderByIdDesc();
【讨论】:
对于选择使用 entityManager 的用户,试试这个:
public List<T> findNRows(int n){
return entityManager.createQuery("from "+entityClass.getSimpleName()+" ORDER BY id DESC",entityClass).setMaxResults(n).getResultList();
}
【讨论】:
我知道我迟到了,但这可能会对某人有所帮助。 如果您想通过创建的时间戳获取最新条目。 (当您不想依赖表 id 时):
YourEntity findFirstByOrderByCreatedTsByDesc();
【讨论】: