2

假设一个实体模型,其中一个Employee有一个Supervisor谁有一个id。用于为实体生成元模型hibernate-jpamodelgen,如何查询嵌套字段?

例如,“获取所有主管的 id 为 4 的员工”,使用JpaSpecificationExecutor

Page<Employee> getEmployeesBySupervisorId(int id) {
  return findAll((root, query, criteriaBuilder) -> {
    return criteriaBuilder.equal(root.get(Employee_.supervisor.id), id);
  });
}

请注意,这Employee_是模型元类Employee(由 Hibernate 生成)。

此代码将产生错误,因为id在 type 上找不到符号SingularAttribute<Employee, Supervisor>。我明白了,但似乎这些应该以某种方式可以链接。我找不到如何干净地做到这一点的好例子。

4

1 回答 1

1

为了导航到相关实体,您必须使用From#join()与 MetaModel 配合良好的 join 方法:

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 的 Java EE 教程 - 使用 Criteria API 和 Metamodel API 创建基本类型安全查询

于 2020-04-13T09:09:48.030 回答