我有如下关系
员工 -> 工作(一对一)
工作 -> 工资(一对多)
它被翻译成以下类
public class Employee
@OneToOne
Job job; ....'
public class Job
@OneToMany()
List<Salary> salaries;
我想要获取那些从事特定工作且具有特定薪水的员工,因此可以返回 hibernate 标准来执行此任务,如下所示
createCriteria(Employee.class).createAlias("job", "job")
.createAlias("job.salaries", "salaries").add(Restrictions.gt("salaries.sum", 5000))
工作正常,但我还想要的是,只有那些大于 5000 的值才可用,并且加载所有工资是否可以通过 hibernate 实现?
最佳答案
我假设您希望将 Salaries 实体作为结果的一部分获取。
在这种情况下试试这个:
createCriteria(Employee.class)
.createAlias("job", "job")
.createAlias("job.salaries", "salaries")
.setFetchMode("job", FetchMode.JOIN)
.setFetchMode("salaries", FetchMode.JOIN)
.add(Restrictions.gt("salaries.sum", 5000));
当然,您还需要在流程中获取作业实体。
更新
尝试添加
@OneToMany(mappedBy = "job")
List<Salary> salaries;
到此映射。我假设 Salary 实体有一个 Job job
字段(它与 @ManytToOne 和 @JoinColumn 正确映射)。
关于java - Hibernate 获取仅满足关系的子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904884/