【发布时间】:2012-04-12 22:12:50
【问题描述】:
我想知道是否有任何 JPQL 构造可以帮助我解决这个问题:
想象一下 Chat 和 User 的简单 M-N 关系(用户可能出现在多个 chat-s 中)。
public class ChatEntity implements Serializable {
@ManyToMany(targetEntity = UserEntity.class)
@JoinTable(name = "CHATS_USERS",
joinColumns = @JoinColumn(name = "CHAT_ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID"))
private Collection<User> users;
}
让我们想象一下这些数据(C1..CN = 聊天 ID,U1..UN = 用户 ID)
c1 ~ {u1, u2, u3} // in chat1 is user1, user2 and user3
c2 ~ {u1, u3}
c3 ~ {u2, u3}
现在我想选择这样的聊天,它具有完全相同的用户集合,我将传递给查询。例如
{u1, u3} -> c2
{u1, u2, u3} -> c1
{u1, u2} -> NULL (no result)
我发现 MEMBER OF constuct 看起来不错。例如
SELECT c FROM Chat c WHERE (:u1 MEMBER OF c.users) AND (:u2 MEMBER OF c.users)
... AND (:uN MEMBER OF c.users)
但是现在有两个问题
到目前为止这是不正确的,因为 {u1, u3} 将返回 c1 和 c2 而不仅仅是 c2 符合预期
-
我得到了用户的集合,但我不知道是否有办法将这样的集合“分解”为 命名查询(查询的静态定义)中的多个 AND 子句,或者是否有是任何可以帮助我解决此问题的 JPQL 构造。例如。像
... WHERE :users = c.users
【问题讨论】: