java - 查找 JPA 的最新条目

标签 java hibernate jpa openjpa

我找到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/

相关文章:

java - 如何使用JPA将多个​​枚举值保存到数据库?

java - 一个实体类映射几个表

java - Hashtags 的最佳 JPA 实体模型

java - 使用hibernate进行一对多查询对数据库有多少次命中?

java - 如何在 hibernate 中第一次创建数据库模式并在模式修改的情况下进一步更新它?

java.io.StreamCorruptedException : invalid stream header: 30313031

java - 查询 DNS 服务器时的域名

Java - CMS 与 G1 垃圾收集器

java - 为什么 toString 方法在这里不起作用?

java - JSP 和 Servlet socketinput 异常