Java JPA/Hibernate连接查询

Java JPA/Hibernate连接查询,java,hibernate,jpa-2.0,Java,Hibernate,Jpa 2.0,目标是检索所有用户,而不是向特定用户(当前登录的用户)发送消息或从该用户接收消息(即使他们尚未回复)的所有用户。我试过很多问题,但都没有用。我有登录用户的id 你有什么想法吗?我假设我需要在Message和RegisteredUser类上进行连接,但不确定它将如何工作,因为消息具有“sender”和“receiver”,这使得查询更加复杂 RegisteredUser类没有对消息的引用: @Entity @Table(name = "USER") public class RegisteredU

目标是检索所有用户,而不是向特定用户(当前登录的用户)发送消息或从该用户接收消息(即使他们尚未回复)的所有用户。我试过很多问题,但都没有用。我有登录用户的id

你有什么想法吗?我假设我需要在Message和RegisteredUser类上进行连接,但不确定它将如何工作,因为消息具有“sender”和“receiver”,这使得查询更加复杂

RegisteredUser类没有对消息的引用:

@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;
我正在使用JPA2.0和Hibernate3.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() + ")"

1和2的值是多少?假设登录用户的id由getId检索,将?1或/和?2设置为getId将返回登录用户,而不是他与之通信或与他通信的用户列表。基本上,如果receiver.id=getid,我需要返回发送者;如果receiver.id=getid,我需要返回接收者。类似的东西不确定它是否有效,当我在家时需要测试:从RegisteredUser u中选择不同的u,其中u在select m1中。发送方从消息m1加入m1.receiver r,其中r.id=+getId+或u在select m2中。接收方从消息m2加入m2.sender s,其中s.id=+getId+Andrey,通过放置以下查询修改您的答案,我将接受它:从RegisteredUser u中选择distinct u,在select m1中选择u。从Message m1中选择sender加入m1.receiver r,其中r.id=+user.getId+或在select m2中选择u。从Message m2中选择receiver加入m2.sender s,其中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() + ")"