JPA / Hibernate Join Query - PullRequest
       8

JPA / Hibernate Join Query

0 голосов
/ 20 марта 2012

Цель состоит в том, чтобы получить всех пользователей (не сообщений), которые отправили сообщение определенному пользователю (текущему вошедшему в систему пользователю) или получили сообщение от этого пользователя (даже если они еще не ответили) , Я перепробовал много запросов, но безрезультатно. (У меня есть идентификатор вошедшего в систему пользователя).

У вас есть идеи? Я предполагаю, что мне нужно выполнить объединение классов Message и RegisteredUser, но я не уверен, как это будет работать, поскольку в сообщении есть «отправитель» и «получатель», что делает запрос немного более сложным.

Класс 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;

Я использую jpa 2.0 и hibernate 3.5.6.

Спасибо!

// РЕДАКТИРОВАТЬ - Решение, благодаря Андрею

"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 Ответ

1 голос
/ 20 марта 2012
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() + ")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...