如何使用hibernate检索父实体的特定子实体

如何使用hibernate检索父实体的特定子实体,hibernate,Hibernate,我正在使用Hibernate命名查询。GetEmployerWithActiveEmployeeList public class Employer { . . @OneToMany(mappedBy = "employer", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) private Set<Employee> employee; . . } public class

我正在使用Hibernate命名查询。GetEmployerWithActiveEmployeeList

public class Employer {
.
.
@OneToMany(mappedBy = "employer", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
private Set<Employee> employee;
.
.
}



  public class Employee {
...
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "employer_id")
private Employer employer;

...
   }
当我检查雇主对象时,它给我显示了所有员工


这在hibernate中可能吗?

您的查询选择至少有一名在职员工的雇主。然而,这种“在职员工”条件只是一个标准。选定的雇主对象仍包含所有员工

你可能想要这样的东西:

select emp from Employer employer left join employer.employees emp where employer.id=:employerId and emp.status = 1
(注意“选择emp”)
然后结果应该是一个Employee对象列表。

如果只使用hibernate而不依赖jpa,您可以查看@Formula annotation。不,亲爱的,这不是我的要求。我希望通过id获取雇主,并且只有相关的活动雇员应该与雇主一起提供。这不是像Hibernate mapper这样的ORM的工作方式。如果加载实体(使用任何查询),则始终会看到所有关联的关系。如果只有在职员工在
雇主的
员工
集合中,那么这将是一个不同的实体。
select emp from Employer employer left join employer.employees emp where employer.id=:employerId and emp.status = 1