Search code examples
hibernatejpacriteriacriteria-api

how to get joined table's property to check if a string is equal to it while implementing a query with Hibernate


I am using Hibernate version 5.4.2.

I am using CriteriaBuilder & CriteriaQuery to generate a criteria query to get some results with the requested joined table's "name" property but I get exception during that process. I want to check if name of employee is equal to string that I mentioned. Employee is a OneToMany property inside Project. Here is the query:

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()) + "%");

Entities:

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;
}

Solution

  • When two entities: Comment and Post, where Comment @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();