как получить свойство объединенной таблицы, чтобы проверить, равна ли ей строка при реализации запроса с Hibernate - PullRequest
0 голосов
/ 10 апреля 2019

Я использую Hibernate версии 5.4.2.

Я использую CriteriaBuilder & CriteriaQuery, чтобы сгенерировать запрос критерия, чтобы получить некоторые результаты со свойством «name» запрошенной объединенной таблицы, но я получаю исключение во время этого процесса.Я хочу проверить, совпадает ли имя сотрудника со строкой, которую я упомянул.Сотрудник - это свойство OneToMany внутри Project. Вот запрос:

    CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
    CriteriaQuery<ProjectTable> criteriaQuery = 
    criteriaBuilder.createQuery(Project.class);
    Root<ProjectTable> projectTableRoot = criteriaQuery.from(Project.class);

   projectTableRoot.alias("employee");

  Predicate employeePredicate =criteriaBuilder.like(projectTableRoot.get("employee").get,"%"+ StringUtils.lowerCase(employee.getName()) + "%");

 public class ProjectTable {

 @OneToMany(mappedBy = "projectTable", cascade = CascadeType.ALL, fetch = 
 FetchType.LAZY)
private List<Employee> employee= Lists.newArrayList();
 }

 public class EmployeeTable {

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "project_employee_fk", referencedColumnName = "id")
@DiffIgnore
private ProjectTable projectTable;
}

1 Ответ

2 голосов
/ 10 апреля 2019

Когда два объекта: комментарий и сообщение, где комментарий @ManyToOne сообщение

CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<Comment> criteriaQuery = criteriaBuilder.createQuery(Comment.class);

Root<Comment> root = getRoot(criteriaQuery);

Join<Comment, Post> joinPost = root.join("post");
Predicate predicate = criteriaBuilder.equal(joinPost.get("id"), 2L);

criteriaQuery
        .select(root)
        .where(predicate);

return getSession()
        .createQuery(criteriaQuery)
        .getResultList();
...