[英]Why most hibernate applications are using sequence for id generation?
為什么大多數hibernate應用程序都使用序列進行id生成?
為什么不在@GeneratedValue注釋中使用默認的GenerationType = AUTO?
PS在我的職業生涯中,我看到每個人都是使用序列,但我不明白為什么他們更難以部署解決方案(在部署指令中始終有序列創建SQL命令)。
我看到幾個原因:
來自Mike Keith和Merrick Schincario的優秀書籍JPA 2 Mastering Java Persistence API 。
從第4章:對象關系映射,標識符生成部分。
[...]如果應用程序不關心提供程序使用哪種生成但希望生成,則可以指定AUTO策略。
但是,使用AUTO有一個問題。 提供者可以選擇自己的策略來存儲標識符,但它需要有某種持久性資源才能這樣做。 例如,如果它選擇基於表的策略,則需要創建一個表; 如果它選擇基於序列的策略,則需要創建序列。 提供程序不能始終依賴從服務器獲取的數據庫連接,以獲得在數據庫中創建表的權限。 這通常是特權操作,通常僅限於DBA。 需要某種創建階段或模式生成,以便在AUTO策略能夠運行之前創建資源。
AUTO模式實際上是開發或原型設計的一代策略。 在生成數據庫模式時,它可以很好地幫助您快速啟動和運行。 在任何其他情況下,最好使用后面章節中討論的其他一代策略[...]
至少對於Oracle來說:一個原因是能夠跟蹤表中的對象數(如果沒有從表中刪除對象,則特定於表的序列是好的)。 使用GenerationType = AUTO使用全局序列號,當數據庫中有多個表時,會導致id號中出現空白。
選擇身份生成器有不同的考慮因素,最重要的是性能和可移植性,但也可能需要考慮群集和數據遷移。
在最新的Hibernate版本(如果不是全部)中,SEQUENCE策略實際上是一個基於序列的HiLo而不是人們所假設的純序列。
您可以在我的博客上閱讀有關身份生成策略的相關詳細信息: 此處
的Eyal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.