在使用Hibernate实现查询时,如何获取联接表的属性以检查字符串是否等于它

时间:2019-04-10 11:07:33

标签: hibernate jpa criteria hibernate-criteria criteria-api

我正在使用Hibernate版本5.4.2。

我正在使用CriteriaBuilder&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 个答案:

答案 0 :(得分:2)

当有两个实体时:Comment和Post,其中Comment @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();
相关问题