JPQL过滤子

时间:2015-10-31 22:04:32

标签: jpa spring-data-jpa

我正在使用spring数据jpa: 在父级上过滤子对象的最佳方法是什么。 在我的下面的例子 我想要具有活动子节点的父对象,也希望只有活动子节点作为父节点列表

  @Query(select distinct p from Parent p inner join p.child c where c.active=:active)

    Page<Parent> getAllPArents(@Param("active") int active);

    @Entity
    Parent{  
      @OneToMany(fetch=FetchType.LAZY)
      List<Child> child;
    }

    @Entity
    Child{
      @ManyToOne
      Parent parent;
    }

3 个答案:

答案 0 :(得分:3)

我遇到了完全相同的问题,我花了一段时间才知道这是如何工作的。当您在FETCH之后添加JOIN时,将会过滤子列表:

SELECT p FROM Parent p JOIN FETCH p.child c WHERE c.active=:active

答案 1 :(得分:1)

花了很多时间后,我找不到任何解决方案来过滤孩子,同时查询父母。 我决定更改数据库结构,以便我能够查询我想要的孩子。添加了另一个可以将子项放入不同类别的字段/属性。当使用独特的标准查询孩子时,我只需要给我所需要的孩子,也给了我需要的父母。

答案 2 :(得分:0)

我找到了执行此操作的方法: 您可以使用@Where批注来过滤一对多或多对多关系的子项。

public class Parent {

    @OneToMany(mappedBy="Parent")
    @Where(clause = "active = 1") //In case of a boolean but it can be a LIKE, a comparator...
    private Set<Child> childs; //This gets filled with pets with a name starting with N

    //getters & setters
}