Vladimir
Vladimir

Reputation: 2553

JPA/Hibernate Join Query

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

Answers (1)

Andrey
Andrey

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

Related Questions