как получить свойство объединенной таблицы, чтобы проверить, равна ли ему строка при реализации запроса с гибернацией

#hibernate #jpa #criteria #criteria-api

#гибернация #jpa #критерии #критерии-api

Вопрос:

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

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

 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:

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

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