如何配置hibernate UUIDGenerator以返回String值而不是UUID Object

时间:2016-10-15 03:34:24

标签: oracle hibernate uuid

我可能会遗漏一些非常基本的东西。我正在尝试从GUIDGenerator迁移到UUIDGenerator。我们的数据库是Oracle,ID列定义为Raw(16)。当我将id属性定义为UUID对象时,代码工作正常,但问题是我们所有的下游代码都假定id是String。我们无法在项目中更改id的类型。 UUID生成器的文档提到了以下内容:

" IdentifierGenerator,它使用可插入的生成策略生成UUID值。这个生成器可以返回的值包括UUID,String和byte [16]"

但我无法找到一个示例,说明如何配置此生成器以返回String值。它似乎总是返回一个UUID对象。

我在配置中使用了以下内容。它工作,即它生成字符串,但它生成一个无效的HEX字符串,导致下面的Oracle错误。

            @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2",
       parameters= {@Parameter(name="Type",value="StringType")})
    @Column(name="ID",columnDefinition = "BINARY(16)")
    public String getId() {
        return id;
    }

Oracle错误:

         INFO : org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl -     HHH000010: On release of batch it still contained JDBC statements
         WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1465, SQLState: 72000
        ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-01465: invalid hex number

有关如何使用UUIDGenerator生成正确十六进制数的任何想法?

1 个答案:

答案 0 :(得分:0)

使用以下代码:

@Id 
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "ID")
private String id;

public String getId()
{
  return id;
}

public void setId(String id)
{
    this.id = id;
}