Java JPA查找最新条目

Java JPA查找最新条目,java,hibernate,jpa,openjpa,Java,Hibernate,Jpa,Openjpa,我发现线程非常有用,但由于JPA的性质,建议中的实现似乎效率不高 我正在寻找一个解决方案,以获取最新的连接查询与分组条目,由JPA实现,所以这不是一个简单的工作。我的实现最后是“按时间顺序DESC”,并从返回集合中选择第一个,而不是使用MAX()函数,该函数也必须引入子查询,但我想知道这是一个好的选择吗 这是我从另一个示例中的示例所做的复杂查询: "SELECT oo FROM Order AS oo WHERE oo.id IN " + "(SELECT temp.id FROM "

我发现线程非常有用,但由于JPA的性质,建议中的实现似乎效率不高

我正在寻找一个解决方案,以获取最新的连接查询与分组条目,由JPA实现,所以这不是一个简单的工作。我的实现最后是“按时间顺序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);

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

检查空列表将是一个好方法idea@DenisTulskiy会这样做:)您认为查找最新条目而不是将所有内容都放在JPQL中是一种好做法吗?我认为DESC的
订单应该是可靠的