Postgres + Hibernate:升级到Hibernate 5.0后,将UUID映射到BYTEA失败

时间:2016-12-12 20:41:17

标签: java postgresql hibernate

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

@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不是一种选择。)
任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我发现解决此问题的最简单方法是将以下内容添加到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定义完全相同,但不知何故它不起作用。