代码之家  ›  专栏  ›  技术社区  ›  Gregor Sklorz

SpringBoot JPQL查询列表NotIn列表

  •  1
  • Gregor Sklorz  · 技术社区  · 6 年前

    我正在处理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); 
    

    也可以选择至少通过以下方式进行过滤:

    List<Parent> findByChildrenNot(Child child);
    

    或者类似的东西。

    这似乎很容易,但我没有找到解决办法。希望你能帮助我。

    提前感谢!

    亲切的问候

    格雷戈

    2 回复  |  直到 6 年前
        1
  •  2
  •   Robert Niestroj    6 年前

    当一个孩子足够用的时候 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); 
    
        2
  •  1
  •   Cepr0    6 年前

    这应该有效(未测试-请给出反馈):

    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