spring data jpa 过滤@OneToMany 中的子项

问题描述 投票:0回答:2


我有一个 EmployeeTest 实体是父实体, FunGroupInfo 实体是子实体。这两个实体都由employeeId映射。我需要一种方法来过滤掉与搜索条件匹配的子实体,以便结果仅包含父实体和子实体(满足要求)。

员工测试类:

@Entity(name = "EmployeeTbl")
public class EmployeeTest{
 @Id
 @Column(name = "emp_id")
 private String employeeId;

 @OneToMany(mappedBy= "employeeId", fetch =FetchType.Eager)
 private Set<FunGroupInfo> funGroupInfo;
}

FunGroupInfo 类:

@Entity(name = "FunGroupTbl")
public class FunGroupInfo{
 @Id
 @Column(name = "group_id")
 private String groupId;

 @Column(name = "emp_id")
 private String employeeId;

 @Column(name = "type_id")
 private String typeId;

 @Column(name = "active")
 private String activeFlag;

}

EmpRepository 接口:

@Repository
public interface EmpRepository extends JpaRepository<EmployeeTest, String>{
List<EmployeeTest> findByFunGroupInfoTypeId(String typeId)
}

//inside by test method

@Autowired 
private EmpRepository  empRepository;

List<EmployeeTest> empList = empRepository.findByFunGroupInfoTypeId("2");

上面的行返回给我带有 FunGroupInfo 的列表,其中 typeId 为 1, 2, 3, 4, 5,但我需要获取唯一匹配的带有 typeId 2 信息的 FunGroupInfo

我现在得到的结果Result which i get now但我实际上只需要突出显示的结果和父级

java jpa java-8 spring-data-jpa
2个回答
3
投票

如果您使用Hibernate,则可以使用注释@Where来过滤OneToMany关系上的元素。

示例:

  import org.hibernate.annotations.Where;
  ...
  @OneToMany(fetch = FetchType.EAGER, mappedBy = "employeeId", cascade = CascadeType.ALL)
  @Where(clause = "type_id = '2'")
  private Set<FunGroupInfo> funGroupInfo;
  ...

更多信息可以咨询这里


0
投票

您找到解决方案了吗?我也遇到同样的问题了

© www.soinside.com 2019 - 2024. All rights reserved.