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);

另见

Oracle's Java EE Tutorial - Using the Criteria API and Metamodel API to Create Basic Typesafe Queries