繁体   English   中英

JPA /休眠联接查询

[英]JPA/Hibernate Join Query

目标是检索已向特定用户(当前登录的用户)发送了消息或已从该用户接收到消息的所有用户(而不是消息)(即使他们尚未回复)。 我已经尝试了许多查询,但都无济于事。 (我有登录用户的ID)。

你有什么想法? 我假设我需要对Message&RegisteredUser类进行联接,但是由于Message具有“发送方”和“接收方”,因此无法确定它的工作方式,这会使查询变得更加复杂。

RegisteredUser类(没有对Message的引用):

@Entity
@Table(name = "USER")
public class RegisteredUser implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

讯息类别:

@Entity
@Table(name = "MESSAGE")
public class Message implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int id;

    @ManyToOne
    @JoinColumn(name = "receiverId")
    RegisteredUser receiver;

    @ManyToOne
    @JoinColumn(name = "senderId")
    RegisteredUser sender;

我正在使用jpa 2.0和休眠3.5.6。

谢谢!

//编辑-解决方案,感谢安德烈(Andrey)

"select distinct u from RegisteredUser u where u in (select m1.sender from Message m1 join m1.receiver r where r.id = " + user.getId() + ") or u in (select m2.receiver from Message m2 join m2.sender s where s.id = " + user.getId() + ")"
select distinct u from RegisteredUser u where 
u in (select m1.sender from Message m1 join m1.receiver r where r.id = " + user.getId() + ") or
u in (select m2.receiver from Message m2 join m2.sender s where s.id = " + user.getId() + ")"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM