我正在使用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;
}
答案 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
}