我可能會缺少一些非常基本的東西。我正嘗試從GUIDGenerator遷移到UUIDGenerator。我們的數據庫是Oracle,ID列被定義爲Raw(16)。當我將id屬性定義爲UUID對象時,代碼工作正常,但問題是我們所有的下游代碼都假定id是String。在這個項目中我們不能改變id的類型。爲UUID發電機的文檔中提到下列:如何配置hibernate UUIDGenerator返回字符串值而不是UUID對象
「使用可插拔生成策略,其生成UUID值一個IdentifierGenerator這個發生器可以返回該值包括UUID,字符串和字節[16]。」
但我不能夠找到一個示例,顯示如何配置此生成器以返回字符串值。它似乎總是返回一個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適當的十六進制數的任何想法?
有沒有人有任何其他想法還是我們只是UUID對象,而不是字符串去? – sohail