2014-12-03 68 views
0

我们需要通过发送器获取最后发布的消息组。JAVA Persistence OrderBy在GroupBy之前

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);

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

回答

0

我的解决办法是先得到所有联系人,然后从接触得到最后发送消息(两个查询,而不是一个大的。

0

也许这样吗?

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); 
+0

不是真的和JPQL不接受子查询。 – 2014-12-05 15:53:38

相关问题