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的主要内容,如果未能解决你的问题,请参考以下文章
entityManager.persist(user) -> javax.persistence.EntityExistsException: User@b3089 已经持久化