【问题标题】:Postgres+Hibernate: Mapping UUID to BYTEA fails after upgrading to Hibernate 5.0Postgres+Hibernate:升级到 Hibernate 5.0 后将 UUID 映射到 BYTEA 失败
【发布时间】:2016-12-12 20:41:17
【问题描述】:

如何使用 Hibernate 5.0 在 Postgres 中将 java UUID 存储为字节数组?
模型:

@Entity
@Table(name = "childs")
public class Child {
  ...
  @Type(type = "pg-uuid")
  private UUID parentId;
  ...
}

表:

CREATE TABLE childs (
    ...
    parent_id BYTEA,
    ...
);

过去在 Hibernate 4.3 中一切正常。升级到 Hibernate 5.0 后出现以下错误:

PSQLException: ERROR: column "parent_id" is of type bytea but expression is of type uuid

查了PostgresUUIDType的源码,发现在新版本的Hibernate中增加了以下内容:

@Override
protected boolean registerUnderJavaType() {
    // register this type under UUID when it is added to the basic type registry
    return true;
}

我尝试将模型中的字段类型更改为@Type(type = "uuid-binary"),但仍然出现相同的错误。 (将列类型更改为 UUID 不是一种选择。)
任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: java postgresql hibernate


    【解决方案1】:

    我发现解决此问题的最简单方法是将以下内容添加到 package-info.java 包中的 domain (或任何需要的地方):

    @TypeDef(name = "pg-uuid-binary", defaultForType = UUID.class, typeClass = UUIDBinaryType.class)
    

    并用ph-uuid-binary@Type(type = "pg-uuid-binary") 注释域的字段。

    在我看来,它与uuid-binary 的定义完全相同,但不知何故它不起作用。

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2023-01-08
      • 2020-01-06
      • 2010-10-20
      • 1970-01-01
      • 2015-09-21
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多