ClassCastException для com.querydsl.core.Tuple - PullRequest
0 голосов
/ 15 ноября 2018

Я получаю исключение как

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

Мой код, кажется, правильный.

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

Исключение выдается в строке с for

Я не знаюне понимаю, почему исключение было брошено.Tuple - это общая проекция результата запроса.И пример там doc похож на мой.Я использую версию querydsl 4.2.1.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Хорошо, так что после модификации моего кода немного по v4.Теперь это работает.Спасибо всем за вашу поддержку.

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();
0 голосов
/ 15 ноября 2018

запрос из сгенерированного класса QPGUserRoles вернет список PGUserRoles, то есть List

Я понятия не имею, что такое Tuple, но это разрешено, по-видимому, потому что метод возвращает List, но не принимает фактический параметр для списка извозвращаемый параметр, но из предоставленного сгенерированного класса.Может быть плохой дизайн или ограничение Java.

Во всех случаях вы должны изменить свой код.Ваш код неверен, просто потому что он компилирует:)

upd: кортеж является проекцией оператора Select.Вы не используете его - результат другой;)

...