2016-10-15 20 views
0

我可能會缺少一些非常基本的東西。我正嘗試從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適當的十六進制數的任何想法?

+0

有沒有人有任何其他想法還是我們只是UUID對象,而不是字符串去? – sohail

回答

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; 
} 
+0

我們嘗試過,但它不生成符合IETF RFC 4122的UUID。我們得到以下警告: WARN:org.hibernate.id.UUIDHexGenerator - HHH000409:使用org.hibernate.id.UUIDHexGenerator,它不生成符合IETF RFC 4122的UUID值;請考慮使用org.hibernate.id.UUIDGenerator – sohail

相關問題