我找到this thread 非常有帮助,但由于 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);
最佳答案
您的解决方案的问题在于它将加载列表中的所有条目供您选择一个。根据this答案,您需要通过调用query.setMaxResults(1)
将结果限制为1。除此之外,这是一个完美的解决方案。您还可以使用 query.getSingleResult()
获取单个实体,但如果没有此类记录,请注意 NoResultException
。
关于java - 查找 JPA 的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242402/