JPQL OUTER JOIN

时间:2014-09-27 23:06:33

标签: hibernate jpa jpql

我有以下实体:

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

我可能错过了某个地方的连接,但不确定。

1 个答案:

答案 0 :(得分:1)

JPQL不允许在没有定义关系的情况下进行连接,但允许右外连接,因此您可以像这样进行查询;

select 
    nod.name,
    Max(msg.timeStamp) 
from 
    Message msg
right join
    msg.node nod
group by 
    nod.name; 

希望它有所帮助。