Search code examples
springinner-joincriteria-api

Model cannot be cast - internal error in spring boot and Criteria API Join


I am trying to join and retrieve joined result using spring boot and criteria API join. Here I am trying to retrieve role id from second table where a user id match found by joining with first table. When I am running my query I am getting the error like,

Error Update

{
"timestamp": "2018-09-10T10:54:01.163+0000",
"status": 500,
"error": "Internal Server Error",
"message": "com.example.model.Roles cannot be cast to 

}

Here I did not used metamodel generated classes. Without using that I implemented. But still getting the same error.


Solution

  • Two things are wrong:

    1. multiselect() takes a list of selected fields. You must not pass a javax.persistence.criteria.Join to its parameter.
    2. Your query condition is not related to join at all, since the condition on field nuserId can full-filled by Users table only.

    If you just want to get both User and its UserRoleMapping at the same time, you can try:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Users> cq = cb.createQuery(Users.class);
    Root<Users> rootRoles = cq.from(Users.class);
    rootRoles.fetch("roleUserRoleMappingMappingJoin", JoinType.LEFT);
    
    cq.select(rootRoles).where(cb.equal(rootRoles.get("nuserId"),nuserID));  
    List<Users> roleJoinResultObj = em.createQuery(cq).getResultList();