【发布时间】:2019-04-18 09:35:18
【问题描述】:
我遇到了异常
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 版本。
【问题讨论】:
-
我认为
fetch方法返回的是List<PGUserRoles>而不是List<Tuple> -
看起来
List<Tuple> dataList = query返回的列表没有返回元组列表,而是 PGUserRoles。请注意,尽管您在列表中使用了类型元组,但实际列表可能是不同的类型。见Type Erasue -
@JeroenSteenbeeke 那没用。当用户在他的帖子中字面上说“我认为有一个错误”时,这就像说“我认为有一个错误”
-
@Jeroen Steenbeeke,你是对的。它正在返回 List
。此代码曾经在 mysema.querydsl v3 中正常工作,但在升级到 querydsl v4 后,事情变得一团糟。 -
@Sarief 指出一个通常只在编译时生成警告但在运行时导致无效强制转换的问题没用?我之所以添加“我认为”是因为我不知道问题提到的具体API,并且OP在他的问题中没有提到泛型类型差异。
标签: java spring jpa spring-data-jpa querydsl