我有一个作为父实体的 EmployeeTest 实体和作为子实体的 FunGroupInfo 实体。这两个实体都由employeeId 映射。我需要一种方法来过滤掉与搜索条件匹配的子实体,以便结果仅包含父实体和子实体(满足要求)。
EmployeeTest 类:
@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 接口(interface):
@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
我现在得到的结果但我实际上只需要突出显示的和父级
最佳答案
如果您使用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;
...
更多信息可咨询here .
关于java - spring data jpa 过滤 @OneToMany 中的子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025040/