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