我有以下实体:
@Entity
public class Node {
@Id
private int id;
@Column
private String name;
//getters, setters
}
@Entity
public class Message {
@Id
private int id;
@Column
private String message;
@Column
private Date timeStamp
@ManyToOne
private Node node;
//getters, setters
}
让我们假设我有3个节点(N1,N2,N3)。 N1和N2有消息而N3没有消息 我想要的结果表如下:
| Node | Last Message |
-----------------------
| N1 | 2014-05-26 |
| N2 | 2014-05-23 |
| N3 | |
-----------------------
所以基本上我想要一个JPQL查询,它返回按Message
分组的最新Node
,
而且还显示没有任何消息的节点。
到目前为止,我有以下查询,但没有给出所需的结果:
select
nod.name,
msg.timeStamp
from
Node nod,
Message msg
where
msg.timeStamp IN
(select
max(ms.timeStamp)
from
Message ms
group by
ms.node)
我可能错过了某个地方的连接,但不确定。
答案 0 :(得分:1)
JPQL不允许在没有定义关系的情况下进行连接,但允许右外连接,因此您可以像这样进行查询;
select
nod.name,
Max(msg.timeStamp)
from
Message msg
right join
msg.node nod
group by
nod.name;
希望它有所帮助。