我想爲每個實體分別自動遞增ID生成器。如何分別使用SQL Server和休眠生成每個表的自動遞增ID
目標數據庫是一個SQL Server數據庫,我使用的是Hibernate 5.2.4.Final。另外我從代碼生成表。
我有一個抽象BaseEntity
和其他像下面的子實體,因此,我的目標是TABLE_PER_CLASS
。
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
protected long id;
@Id
@GeneratedValue(strategy = GenerationType.XXX)
@Column(name = "Id")
public long getId() {
return id;
}
}
@Entity
@Table(name = "Tags")
public class Tag extends BaseEntity {
}
下面是我迄今所面臨的不同的方案:
- 設置
XXX
到AUTO
:創建一個hibernate_sequence
表在數據庫中,我認爲,將不提供單獨的表不同的ID序列。 - 設置
XXX
至SEQUENCE
:同上。推薦this,同時這樣做。 - 設置
XXX
至TABLE
:創建一個hibernate_sequences
表,該表可以爲單獨的表提供單獨的id序列。但是,我發現這是非常昂貴的(與上述參考文獻相同),也不是我的首選策略。 - 設置
XXX
至TABLE
:對TABLE_PER_CLASS
不起作用。
我實際上想要使用的是SQL Server的本機標識列。但是,使用SEQUENCE
也是一種選擇,但我不確定如何從休眠狀態創建和使用每個表。請建議如何實現這兩者中的任何一個。
由哈利勒M.答案更新我試圖在兩種可能的方式:
- 應用上
BaseEntity
- >不創建爲每個表單獨序列,和而創建ID_SEQNCE
,這在保存每個新實體之前查詢。所以,我不確定這與使用GenerationType.TABLE
有什麼不同。 - 將其應用於每個單獨的實體類 - >在保存時,生成器會創建重複的ID。
謝謝你的回答。但是,它沒有按預期工作。請查看更新的問題以獲取更多詳細信息。 –
更新了我的答案 –