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