JPA / Hibernate加入查询

时间:2012-03-20 05:14:41

标签: java hibernate jpa-2.0

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

你有什么想法吗?我假设我需要加入Message&已注册的用户类,但不确定它是如何工作的,因为消息具有'发送者'和& 'receiver'使查询更复杂一些。

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和hibernate 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() + ")"

1 个答案:

答案 0 :(得分:1)

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() + ")"