2017-09-27 108 views
1

我有用於ID下面的說明書一個數據庫:未知積分數據類型

代碼:VARCHAR(3) - 這是主鍵,最多 長度的3個字符

字符串

,我在下面的方式映射編號:

@Id 
    @GeneratedValue 
    private String code; 

而且我正在嘗試調用當這個錯誤0:

異常線程 「main」 org.hibernate.id.IdentifierGenerationException:未知整體數據 類型IDS:java.lang.String中

我缺少什麼?

謝謝! :)

+2

這意味着GeneratedValue應該是一個整數而不是java.lang.String – CodeMatrix

+0

什麼是生成ID?保存前的一些java代碼?懷疑數據庫.. –

+0

數據庫規範說:「VARCHAR(3) - 這是主鍵,最大長度爲3個字符的字符串」,所以它是一個字符串... – Ric

回答

1

使用普通@GeneratedValue不會做的訣竅,因爲它提供了GenerationType.AUTO選項,它告訴持久性提供商自己決定策略,但在字符串的情況下,它不能解決任何解決方案。

通常情況下,您會選擇uuid自定義生成策略,但這會導致長度爲32的字符串,這更像是您的列可以處理的字符串。

如果你真的想避免設置id手動每次之前保存你可以採取PrePersist實體監聽器的優勢:

@PrePersist 
private void generateCodeIdentifier(){ 
    setCode(/* Generate the unique code identifier */); 
} 
+0

謝謝!我剛剛閱讀的Hibernate不支持String除了uuid,它有你剛纔指出的問題。 – Ric

1
@GeneratedValue 

不能與字符串類型使用,因爲它會返回整型類型。所以,如果你想使用String作爲ID,你必須手動分配它。但如果它適合您的需要,可以使用String作爲ID。