2009-11-26 31 views
4

設置我的實體屬性hibernate @GeneratedValue是否正確?

@GeneratedValue 
Long id; 

,我能夠生成用於在數據庫中的實體ID。我的問題是爲什麼所有的實體共享相同的增量數? 是不是每個表都應該從零開始計數?

回答

7

這取決於基礎數據庫。 GenerationType默認爲AUTO,和Hibernate選擇取決於數據庫的三個變種之一。如果你想使用一個特別的,將其設置爲屬性@GeneratedValue

+0

我已經設置@GeneratedValue,所以現在所有的實體共享相同的序列。我想每個實體都有它自己的序列 – cometta 2009-11-27 05:12:30

+1

嘗試GenerationType.TABLE – Bozho 2009-11-27 05:49:00

+0

我得到錯誤:無法獲取或更新下一個值;嵌套的例外是org.hibernate.exception.SQLGrammerException:無法獲取或更新下一個值 – cometta 2009-11-30 02:31:24

2

這是依賴於數據庫。 JPA實現根據使用的數據庫系統使用不同的ID生成器。例如,使用Oracle,將創建一個單一序列,並且該序列將用於爲所有實體類型生成ID。默認情況下,它不會爲每個實體創建序列,因爲通常沒有理由。同樣的邏輯適用於使用序列而不是自動增加列的其他數據庫系統。

我不是100%肯定,如果JPA的API可以讓你改變這種行爲,但我知道,Hibernate的註釋做。但是,您還沒有告訴我們您正在使用哪個數據庫,或者您正在使用哪個JPA實現,因此我無法給您更多的建議。

+0

我使用oracle數據庫和使用spring-hibenateTemplate – cometta 2009-11-27 05:11:18