【问题标题】:JPA find the Last entryJPA 找到最后一个条目
【发布时间】:2011-01-04 21:17:35
【问题描述】:

我想知道使用 JPA 获取表的最后一个条目的最佳方法是什么。 在 Sql 中,我正在寻找的是:

select id from table order by id desc limit 1 

我在考虑 model.count() 但这听起来更像是一个 hack,而不是一个好的解决方案;)

【问题讨论】:

    标签: java sql jpa


    【解决方案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】:

    查询方法的结果可以通过关键字firsttop来限制,可以互换使用。可以将可选数值附加到 top/first 以指定要返回的最大结果大小。如果省略数字,则假定结果大小为 1。

    JpaClass findFirstByOrderByIdDesc();
    

    referenced by 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();
    }
    

    【讨论】:

      【解决方案4】:

      我知道我迟到了,但这可能会对某人有所帮助。 如果您想通过创建的时间戳获取最新条目。 (当您不想依赖表 id 时):

      YourEntity findFirstByOrderByCreatedTsByDesc();

      【讨论】:

        猜你喜欢
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        • 2014-10-22
        • 2015-06-09
        相关资源
        最近更新 更多