JPQL OUTER JOIN
问题描述:
我有以下实体:JPQL OUTER JOIN
@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查询returnsthe最新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)
我可能错过了参加地方在那里,但不能确定。
答
JPQL不允许没有定义关系的连接,但允许右外连接,所以你可以这样做你的查询;
select
nod.name,
Max(msg.timeStamp)
from
Message msg
right join
msg.node nod
group by
nod.name;
希望它有帮助。
啊仍然使用jpa 2.0,并得到使用正确的连接IDE错误。升级到2.1,它的工作:) – ChrisGeo 2014-09-28 16:24:10
哦,很好,你认为它。我忘记提及这一点。 Sry基因。 – 2014-09-28 19:27:53