2012-03-20 18 views
0

特定のユーザ(現在ログインしているユーザ)にメッセージを送信したすべてのユーザ(メッセージではない)を取得するか、このユーザからメッセージを受信したまだ返信していない)。私は多くのクエリを試したが、役に立たない。 (私はログインしているユーザーのIDを持っています)。JPA/Hibernate Join Query

ご意見はありますか?私は、メッセージ& RegisteredUserクラスに参加する必要があると仮定していますが、メッセージに「送信者」の&「受信者」があり、クエリがもう少し複雑になるため、どのように動作するのかわかりません。

RegisteredUserクラス(メッセージへの参照を持っていません):

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

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

Messageクラス:

@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を休止しています。

ありがとうございます!

// EDIT - ??ソリューション、アンドレイ

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

のおかげで1の値は、&2は何でしょうか?ログインしたユーザーのIDがgetId()によって取得されたと仮定すると、?1または/および?2をgetId()に設定すると、通信したユーザーのリストまたは彼と通信したユーザーのリストではなく、 – Vladimir

+0

基本的には、sender.id = getId()のときにreceiver.id = getid()と受信機を返す必要があります。 – Vladimir

+0

何かこれがうまくいくかどうかはわかりません。 mホームから):RegisteredUserから別のuを選択して下さい。 (メッセージm1のm1.senderをm1.receiver rに追加します。r.id = "+ getId()+")またはuを入力します(メッセージからm2.receiverを選択します)。 m2)を入力します。ここでs.id = "+ getId()+") " – Vladimir