Java JPA查找最新条目
我发现线程非常有用,但由于JPA的性质,建议中的实现似乎效率不高 我正在寻找一个解决方案,以获取最新的连接查询与分组条目,由JPA实现,所以这不是一个简单的工作。我的实现最后是“按时间顺序DESC”,并从返回集合中选择第一个,而不是使用MAX()函数,该函数也必须引入子查询,但我想知道这是一个好的选择吗 这是我从另一个示例中的示例所做的复杂查询: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 "
"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的订单应该是可靠的