SpringBoot JPQL查询列表NotIn列表

时间:2018-05-08 15:53:32

标签: hibernate spring-boot jpa spring-data-jpa jpql

我很难与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); 

Optionaly可以至少过滤像Child这样的:

List<Parent> findByChildrenNot(Child child);

或类似的东西。

看起来很容易,但我没有找到解决方案。希望你能帮帮我。

提前致谢!

亲切的问候

格里

2 个答案:

答案 0 :(得分:1)

这应该有效(未经测试 - 请提供反馈):

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); 

更多信息:123

答案 1 :(得分:1)

如果一个孩子足够,请使用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);