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