Что не так с моим кодом API критериев JPA (взятым из учебника по JEE6)? - PullRequest
1 голос
/ 04 октября 2010

Это мой код, который я даже не могу скомпилировать:

/**
 * Find a project that has NO employee assigned yet.
 */
public Project findEmptyProject() {
  // getting criteria builder
  CriteriaBuilder cb = this.em.getCriteriaBuilder();
  // gathering meta information about left-joined entity
  Metamodel m = this.em.getMetamodel();
  EntityType<Employee> Employee_ = m.entity(Employee.class);
  // creating query
  CriteriaQuery<Project> cq = cb.createQuery(Project.class);
  // setting query root for the query
  Root<Project> project = cq.from(Project.class);
  // left-joining with another employees
  Join<Employee, Project> projects = project.join(
    Employee_.project, 
    JoinType.LEFT
  );
  // instructing the query to select only projects
  // where we have NO employees
  cq.select(project).where(Employee_.id.isNull());
  // fetching real data from the database
  return this.em.createQuery(cq).getSingleResult();
}

Мои классы моделей:

public class Employee {
  @Id private Integer id;
  @ManyToOne private Project project;
  private String name;
}

public class Project {
  @Id private Integer id;
  private String name;
}

Компилятор говорит (и я бы сказал, чтокомпилятор):

Finder.java: cannot find symbol: variable project
location: interface javax.persistence.metamodel.EntityType<com.XXX.Employee>

Что я делаю не так?

1 Ответ

3 голосов
/ 04 октября 2010

Когда вы используете синтаксис Employee_.project, Employee_ должен быть автоматически сгенерированным классом метамодели , а не EntityType, полученным через Metamodel.entity().

Руководство по генератору метамоделей JPA 2 в Hibernate объясняет, как настроить генерацию этих классов в Hibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...