Hibernate JPA 元模型——引用嵌套属性?
Hibernate JPA Meta Model -- reference nested properties?
假设一个实体模型,其中 Employee
有一个 Supervisor
,后者有一个 id
。使用 hibernate-jpamodelgen
为实体生成元模型,如何查询嵌套字段?
例如,"get all employees whose supervisor has id 4",使用JpaSpecificationExecutor
:
Page<Employee> getEmployeesBySupervisorId(int id) {
return findAll((root, query, criteriaBuilder) -> {
return criteriaBuilder.equal(root.get(Employee_.supervisor.id), id);
});
}
请注意,Employee_
是 Employee
的模型元数据 class(由 Hibernate 生成)。
此代码将产生错误,因为无法在类型 SingularAttribute<Employee, Supervisor>
上找到 id
符号。我明白了,但似乎这些应该以某种方式可以链接。我找不到很好的例子来说明如何干净地做到这一点。
为了导航到相关实体,您必须使用 From#join()
join 方法,它适用于 MetaModel:
CriteriaQuery<Employee> cq = criteriaBuilder.createQuery(Employee.class);
Root<Employee> from = cq.from(Employee.class);
Predicate p = criteriaBuilder.equal(from.join(Employee_.supervisor).get(Supervisor_.id), id);
另见
假设一个实体模型,其中 Employee
有一个 Supervisor
,后者有一个 id
。使用 hibernate-jpamodelgen
为实体生成元模型,如何查询嵌套字段?
例如,"get all employees whose supervisor has id 4",使用JpaSpecificationExecutor
:
Page<Employee> getEmployeesBySupervisorId(int id) {
return findAll((root, query, criteriaBuilder) -> {
return criteriaBuilder.equal(root.get(Employee_.supervisor.id), id);
});
}
请注意,Employee_
是 Employee
的模型元数据 class(由 Hibernate 生成)。
此代码将产生错误,因为无法在类型 SingularAttribute<Employee, Supervisor>
上找到 id
符号。我明白了,但似乎这些应该以某种方式可以链接。我找不到很好的例子来说明如何干净地做到这一点。
为了导航到相关实体,您必须使用 From#join()
join 方法,它适用于 MetaModel:
CriteriaQuery<Employee> cq = criteriaBuilder.createQuery(Employee.class);
Root<Employee> from = cq.from(Employee.class);
Predicate p = criteriaBuilder.equal(from.join(Employee_.supervisor).get(Supervisor_.id), id);
另见