java - 使用 NamedNativeQuery 获取 UUID:[B 无法转换为 java.util.UUID
问题描述
我有一个特殊的 Hibernate 查询,我必须写成NamedNativeQuery
. 这看起来像这样:
@Entity
@Table(name = "XYZ")
@NoArgsConstructor
@AllArgsConstructor
@NamedNativeQueries({
@NamedNativeQuery(
name = [...],
query = " SELECT DISTINCT uuid [...]"
)
})
public class XyzEntity implements Serializable {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Type(type = "uuid-binary")
@Column(name = "uuid", columnDefinition = "RAW(32)", nullable = false)
private UUID uuid;
}
查询本身有效。以这种方式访问结果集:
public List<UUID> getXyz() {
final Query query = getEntityManager().createNamedQuery([...]);
final List<UUID> resultList = query.getResultList();
return resultList;
}
但是现在,如果我尝试遍历这个结果列表,我会得到Caused by: java.lang.ClassCastException: [B cannot be cast to java.util.UUID
调用如下所示:
public void abc() {
final List<UUID> uuids = service.getXyz();
//the start of the loop causes java.lang.ClassCastException: [B cannot be cast to java.util.UUID
for (UUID uuid : uuids) {
//do something
}
}
显然,Hibernate 无法将 NamedNativeQuery 结果正确映射到 Java UUID,因为内容似乎只是二进制的。处理这个问题的正确方法是什么?
解决方案
推荐阅读
- python - 如何在 python 正则表达式中对日期匹配应用验证
- html - 长标题文本表无法修复
- regex - “查找和替换”中的正则表达式;如何匹配 \n (换行符)?
- x86 - 为什么在 x86 处理器中触发 NMI 信号边缘,而触发 INTR 信号电平?
- video - MPEG4 X264 与 NVENC H264 编码在旧设备上播放兼容性
- laravel - Laravel 查询生成器调用成员函数 where() on null
- node.js - 我正在使用 node express 和 passport-jwt 创建一个简单的路由来使用 json web token 进行身份验证
- codeigniter-4 - 错误异常 - 未定义变量:CodeIgniter4 中的会话
- image - 如何从 Multi Image Picker 保存图像,在 Flutter 中保留其原始元数据/exif 内容?
- typescript - 复杂的泛型类型约束和类型推断