我可能会遗漏一些非常基本的东西。我正在尝试从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生成正确十六进制数的任何想法?
答案 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;
}