JPQL множественный член - PullRequest
1 голос
/ 29 марта 2012

Мне интересно, есть ли какая-либо конструкция 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)

Но теперь есть две проблемы

  1. Это пока неверно, потому что {u1, u3} вернет оба c1 и c2 и не только c2 , как ожидалось

  2. Я получил коллекцию пользователей, и я не знаюесли есть способ, как «разложить» такую ​​коллекцию на несколько предложений AND в с именем query (статическое определение запроса), или если есть какая-либо конструкция JPQL, которая поможет мне в этом.Например, что-то вроде

    ... ГДЕ: users = c.users

1 Ответ

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

Итак ... вы хотите, чтобы пользователи включали только этих пользователей?

Возможно, также включают

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