Проверка точного соответствия в коллекции с Spring JPA - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть запрос, который проверяет, не содержит ли коллекция определенные элементы, а затем возвращает результат, но мне было интересно, есть ли лучший способ написать это, используя собственный SQL или JPQL

  @Query("from User u where ?1 not member of u.roles and ?2 not member of u.roles and ?3 not member of u.roles")
  List<User> findAllByRolesIn(Role role1, Role role2, Role role3);

Я попытался с помощью Set и передал его в качестве параметра для проверки, выполнив это

@Query("from User u where ?1 member of u.roles")
List<User> findAllByRolesIn(Set<Role> roles); // where the three roles are in the set

Я также попытался использовать in и not in, но не смог заставить это работать.

1 Ответ

0 голосов
/ 03 апреля 2020

См. Здесь раздел 10.2.3.6 https://docs.oracle.com/html/E13946_04/ejb3_langref.html#ejb3_langref_collection_dec

Я думаю, вам нужно использовать что-то вроде этого:

select distinct u from User u join u.roles r where r in ?1
...