在使用Hibernate实现查询时,如何获取连接表的属性以检查字符串是否与其相等

问题描述 投票:0回答:1

我正在使用Hibernate版本5.4.2。

我正在使用CriteriaBuilder和CriteriaQuery生成一个条件查询,以获取所请求的连接表的“名称”属性的一些结果,但在此过程中我得到了异常。我想检查员工的姓名是否等于我提到的字符串。 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;
}
hibernate jpa criteria hibernate-criteria criteria-api
1个回答
2
投票

当两个实体:评论和帖子,评论@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();
© www.soinside.com 2019 - 2024. All rights reserved.