Search code examples
javaspringjpaspring-data-jpaquerydsl

ClassCastException for com.querydsl.core.Tuple


I am getting exception as

java.lang.ClassCastException: com.chat.dao.model.PGUserRoles cannot be cast to com.querydsl.core.Tuple

My code seems to be correct.

JPAQuery<Tuple> query = new JPAQuery<Tuple>(entityManager);
QPGUserRoles pgUserRoles = QPGUserRoles.pGUserRoles;
List<Tuple> dataList = query
    .from(pgUserRoles)
    .where(isRoleName(userRolesDTO.getRoleName()),
        isRoleType(userRolesDTO.getRoleType()),
        isStatus(userRolesDTO.getStatus()),
        isStatusNotEq()
    )
    .offset(offset)
    .limit(limit)
    .orderBy(orderByRoleIdDesc())
    .fetch();
UserRolesDTO userData = null;
for (Tuple tuple : dataList) {
    userData = new UserRolesDTO();
    userData.setRoleId(tuple.get(pgUserRoles.roleId));
    userData.setRoleName(tuple.get(pgUserRoles.roleName));
    userData.setRoleType(tuple.get(pgUserRoles.roleType));
    userData.setStatus(tuple.get(pgUserRoles.status));
    userRoleList.add(userData);
}

Exception is thrown at line with for

I don't understand why exception is been throw. Tuple is generic query result projection. And the example in there doc is similar to mine. I'm using querydsl 4.2.1 version.


Solution

  • Ok so after modifying my code a little bit wrt v4. Its working now. Thank you all for your support.

    JPAQuery<Tuple> query = new JPAQuery<Tuple>(entityManager);
            QPGUserRoles pgUserRoles = QPGUserRoles.pGUserRoles;
            List<Tuple> dataList = query
                    .from(pgUserRoles)
                    .select(pgUserRoles.roleId,
                            pgUserRoles.roleName,
                            pgUserRoles.roleType,
                            pgUserRoles.status)
                    .where(isRoleName(userRolesDTO.getRoleName()),
                            isRoleType(userRolesDTO.getRoleType()),
                   isStatus(userRolesDTO.getStatus()),
                   isStatusNotEq()
                    )
                    .offset(offset)
                    .limit(limit)
                    .orderBy(orderByRoleIdDesc())
                    .fetch();