spring-data-jpa JPQL筛选子项

t2a7ltrp  于 2022-11-10  发布在  Spring
关注(0)|答案(3)|浏览(182)

我使用的是 spring data 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;
    }
zqry0prt

zqry0prt1#

我也遇到了同样的问题,我花了一段时间才弄清楚它是如何工作的。当你在JOIN之后添加FETCH时,子列表将被过滤,如下所示:

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

oalqel3c2#

花了很多时间后,我无法找到任何解决方案来过滤子查询父。我决定改变数据库结构,这样我就可以查询我想要的子。添加了另一个字段/属性,可以把子到不同的类别。当查询子使用唯一的条件,将只给予我我需要的子,也给了我我需要的父。

zynd9foi

zynd9foi3#

我找到了这样做的方法:您可以使用@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
}

相关问题