首页 > 解决方案 > 使用 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,因为内容似乎只是二进制的。处理这个问题的正确方法是什么?

标签: javahibernateuuid

解决方案


推荐阅读