Reputation: 2553
The goal is to retrieve all users (not messages) that have sent a message to a particular user (the current logged-in user), or have received a message from this user (even if they didn't reply yet). I've tried many queries, but to no avail. (I have the id of the logged-in user).
Do you have any ideas? I'm assuming I need to do a join on Message & RegisteredUser classes, but not sure how it'll work since the Message has the 'sender' & 'receiver' which makes the query a bit more complex.
RegisteredUser class (doesn't have a reference to Message):
@Entity
@Table(name = "USER")
public class RegisteredUser implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
Message class:
@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;
I'm using jpa 2.0 and hibernate 3.5.6.
Thanks!
//EDIT -- The Solution, thanks to 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() + ")"
Upvotes: 0
Views: 1568
Reputation: 696
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() + ")"
Upvotes: 1