寻找JPA的最新条目

时间:2014-10-07 18:09:33

标签: java hibernate jpa openjpa

我发现this主题非常有帮助,但由于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 :(得分:2)

您的解决方案的问题在于它会在列表中加载所有条目以供您选择。根据{{​​3}}回答,您需要通过调用query.setMaxResults(1)将结果限制为1。除此之外,它是一个非常好的解决方案。您也可以使用query.getSingleResult()获取单个实体,但如果没有此类记录,请注意NoResultException