SpringBoot JPQL запрос Список NotIn List - PullRequest
0 голосов
/ 08 мая 2018

Я борюсь с запросом к базе данных MySQL и надеюсь, что вы мне поможете. Пример является абстрактным, поскольку проблема заключается в запросе:

POJO:

class Parent
{
 List<Child> children;
}

class Child
{
 Integer id;
}

Теперь я хочу найти всех родителей, которые НЕ имеют определенных детей.

как:

List<Parent> findByChildrenNotIn(List<Child> childs);

или

@Query("SELECT p FROM Parent p "
        + "LEFT OUTER JOIN p.children c "
        + "WHERE c.id != ?1 " 
        + "GROUP BY p.id "
        )
List<Parent> findByNotChildren(List<Integer> childIds); 

Необязательно, можно было бы фильтровать хотя бы по Child, например:

List<Parent> findByChildrenNot(Child child);

или что-то в этом роде.

Кажется, это так просто, но я не могу найти решение. Надеюсь, ты сможешь мне помочь.

Заранее спасибо!

С уважением

Грегор

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Когда достаточно одного ребенка, используйте MEMBER OF вот так:

@Query("select p from Parent p where :child NOT MEMBER OF p.childs")
List<Parent> findParents(@Param("child")Child child); 

Если бы у вас были двунаправленные отношения, вы могли бы запросить их следующим образом:

@Query("SELECT DISTINCT c.parent FROM Child c WHERE c NOT IN (:childs)")
List<Parent> findParents(@Param("childs")List<Child> childs); 
0 голосов
/ 08 мая 2018

Это должно работать (не проверено - пожалуйста, оставьте отзыв):

List<Parent> findDistinctByChildrenIdNotIn(List<Integer> childIds);

или

@Query("select distinct p from Parent p left join p.children c where c.id not in ?1")
List<Parent> findParents(List<Integer> childIds); 

Дополнительная информация: 1 , 2, 3

...