GroupBy 之前的 JAVAX 持久性 OrderBy

Posted

技术标签:

【中文标题】GroupBy 之前的 JAVAX 持久性 OrderBy【英文标题】:JAVA Persistance OrderBy before a GroupBy 【发布时间】:2015-02-01 09:53:11 【问题描述】:

我们需要通过发送者获取最后发布的消息组。

Query query = em.createQuery("SELECT m FROM Message m " + "JOIN m.transmitter " + "JOIN m.recipient " + "WHERE m.transmitter = :u1 " + "OR m.recipient = :u1 " + "GROUP BY m.recipient,m.transmitter " + "ORDER BY m.sendDate DESC"); query.setParameter("u1", actualUser);

但我们需要这样的东西来获取最旧的消息:

Query query = em.createQuery("SELECT m FROM Message m " + "JOIN m.transmitter " + "JOIN m.recipient " + "WHERE m.transmitter = :u1 " + "OR m.recipient = :u1 " + "ORDER BY m.sendDate DESC" "GROUP BY m.recipient,m.transmitter "); query.setParameter("u1", actualUser);

感谢您的帮助,对不起我的英语。

【问题讨论】:

【参考方案1】:

我的解决方案是先获取所有联系人,然后从联系人获取最后发送消息(两个查询而不是一个大查询。

【讨论】:

【参考方案2】:

可能是这样的?

Query query = em.createQuery("SELECT m FROM Message m " +
                "WHERE m.sendDate = (" +
                "SELECT MAX(m.sendDate) FROM MESSAGE m "
                "JOIN m.transmitter t " +
                "JOIN m.recipient r " +
                "WHERE t = :u1 " +
                "OR r = :u1)");
        query.setParameter("u1", actualUser);

【讨论】:

以上是关于GroupBy 之前的 JAVAX 持久性 OrderBy的主要内容,如果未能解决你的问题,请参考以下文章

Javax 唯一约束行为 持久化重复行时

找不到元素“持久性”的声明

entityManager.persist(user) -> javax.persistence.EntityExistsException: User@b3089 已经持久化

如何通过另一列的值 pandas 聚合 groupBy [重复]

sql语句中的group by要怎么用!!

如何在 Keycloak 身份验证之前调用 javax.servlet.Filter