我想知道用JPA获取表的最后一个条目的最佳方法是什么。 在Sql中,我正在寻找的是:
select id from table order by id desc limit 1
我在考虑使用model.count()但这听起来更像是一个黑客而不是一个好的解决方案;)
答案 0 :(得分:33)
查询方法的结果可以通过关键字第一或顶部进行限制,可以互换使用。可选的数值可以附加到top / first以指定要返回的最大结果大小。如果省略该数字,则假定结果大小为1。
JpaClass findFirstByOrderByIdDesc();
答案 1 :(得分:21)
您可以使用与您的查询非常相似的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 :(得分:1)
我知道我参加晚会很晚,但这可能会对某人有所帮助。 如果要通过创建的时间戳获取最新条目。 (当您不想依赖表ID时):
YourEntity findFirstByOrderByCreatedTsByDesc();
答案 3 :(得分:0)
对于选择使用EntityManager的用户,请尝试以下操作:
public List<T> findNRows(int n){
return entityManager.createQuery("from "+entityClass.getSimpleName()+" ORDER BY id DESC",entityClass).setMaxResults(n).getResultList();
}