Hibernate JPA Meta Model - ссылки на вложенные свойства? - PullRequest
1 голос
/ 30 марта 2020

Предположим, что модель сущности, в которой Employee имеет Supervisor, имеет id. Как с помощью hibernate-jpamodelgen создать метамодель для сущностей, как я могу запросить вложенное поле?

Например, «получить всех сотрудников, у руководителя которых есть идентификатор 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 не может быть найден в типе SingularAttribute<Employee, Supervisor>. Я понимаю, но похоже, что они должны быть как-то цепями. Я не могу найти замечательных примеров того, как сделать это чисто.

1 Ответ

1 голос
/ 13 апреля 2020

Чтобы перейти к связанным сущностям, вы должны использовать From#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 Java EE Учебное пособие - Использование Criteria API и Metamodel API для создания базовых c Typesafe Queries

...