JPQL多个成员

时间:2012-03-29 09:16:37

标签: jpa jpql

我想知道是否有任何JPQL结构可以帮助我解决这个问题:

想象聊天和用户的简单M-N关系(用户可能出现在多个聊天中)。

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}

现在我想选择这样的聊天,它具有完全相同的用户集合,我将传递给查询。 E.g。

{u1, u3} -> c2
{u1, u2, u3} -> c1
{u1, u2} -> NULL (no result)

我发现构造成员似乎很好。 E.g。

SELECT c FROM Chat c WHERE (:u1 MEMBER OF c.users) AND (:u2 MEMBER OF c.users)
    ... AND (:uN MEMBER OF c.users)

但现在有两个问题

  1. 到目前为止这是不正确的,因为 {u1,u3} 将返回 c1 c2 ,而不仅仅是 c2 符合预期

  2. 我收到了用户的集合,我不知道是否有办法如何将这种集合“分解”为命名查询中的多个AND子句(查询的静态定义)或者是否有任何JPQL结构可以帮助我解决这个问题。例如。

    之类的东西

    ... WHERE:users = c.users

1 个答案:

答案 0 :(得分:0)

所以......你希望用户只包括那些用户吗?

也许还包括

AND size(c.users) = 3

或者,也许,

Select c from Chat c join c.users u where not exists (Select u from User u2 where u = u2 and u.id not in :ids)