com.querydsl.core.Tuple 的 ClassCastException
ClassCastException for com.querydsl.core.Tuple
我收到异常
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
处抛出异常
我不明白为什么会抛出异常。元组是通用的查询结果投影。 doc 中的示例与我的相似。
我使用的是 querydsl 4.2.1 版本。
从生成的 class QPGUserRoles 查询将 return PGUserRoles 列表,即 List
我不知道 Tuple 是什么,但它显然是允许的,因为方法 return List 但不从 returned 参数中获取列表的实际参数,而是从提供的生成 class。可能是糟糕的设计或 java 限制。
在所有情况下,您都必须更改代码。您的代码不正确,仅仅是因为它编译:)
upd:元组是 Select 语句的投影。您不使用它 - 结果不同 ;)
好的,在对 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();
我收到异常
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
我不明白为什么会抛出异常。元组是通用的查询结果投影。 doc 中的示例与我的相似。 我使用的是 querydsl 4.2.1 版本。
从生成的 class QPGUserRoles 查询将 return PGUserRoles 列表,即 List
我不知道 Tuple 是什么,但它显然是允许的,因为方法 return List 但不从 returned 参数中获取列表的实际参数,而是从提供的生成 class。可能是糟糕的设计或 java 限制。
在所有情况下,您都必须更改代码。您的代码不正确,仅仅是因为它编译:)
upd:元组是 Select 语句的投影。您不使用它 - 结果不同 ;)
好的,在对 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();