Мне интересно, есть ли какая-либо конструкция JPQL, которая могла бы помочь мне с этой проблемой:
Представьте себе простые отношения MN чата и пользователя (пользователь может присутствовать в нескольких чатах).
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 = идентификаторы чата, U1..UN = идентификаторы пользователей)
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)
Я нашел ЧЛЕН КОНСТРУКЦИИ, который кажется хорошим.Например,
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 в с именем query (статическое определение запроса), или если есть какая-либо конструкция JPQL, которая поможет мне в этом.Например, что-то вроде
... ГДЕ: users = c.users