我正在研究將支持多個數據庫引擎(Oracle,MSSQL,MySQL)的產品。對於Oracle,我寧願使用Sequences而不使用Sequence表來避免潛在的併發性和鎖定高容量安裝的問題,但其他數據庫引擎不支持序列。此外,我寧願每個表使用一個序列而不是全局序列(例如hibernate_sequence
),因此@GeneratedValue(strategy = GenerationType.AUTO)
將不起作用。有沒有辦法在運行時動態選擇策略?有沒有辦法使用JPA批註和Hibernate動態選擇@GeneratedValue策略?
14
A
回答
22
實際上,Hibernate使用其org.hibernate.id.enhanced.SequenceStyleGenerator
來解釋GenerationType.AUTO
和GenerationType.SEQUENCE
。 SequenceStyleGenerator是一種id生成策略,可根據底層數據庫支持的兩種策略選擇其中一種策略。如果數據庫支持序列,SequenceStyleGenerator使用序列;如果沒有,SequenceStyleGenerator會回退到使用「序列表」。要使用的發電機的「映射」由設置hibernate.id.new_generator_mappings
控制。將其設置爲true將啓用上面剛剛描述的行爲。不幸的是,出於向後兼容的原因,我們必須將其默認爲false。所以要利用這一點,你需要確保設置設置爲true。
此外,如果沒有給出名稱,您可以配置SequenceStyleGenerator以選擇全局序列或每個實體的序列。這由一個名爲prefer_sequence_per_entity
的設置控制。SequenceStyleGenerator通常可以很好地配置。看看它的javadocs的更多信息:http://docs.jboss.org/hibernate/orm/4.1/javadocs/index.html?org/hibernate/id/enhanced/SequenceStyleGenerator.html
相關問題
- 1. 如何使用Hibernate/JPA批註覆蓋GenerationType策略?
- 2. 有沒有辦法使用Hibernate遷移JPA表名?
- 3. 有沒有辦法可以批量註冊活動?
- 4. 遷移Hibernate到JPA沒有標註
- 5. Hibernate/JPA - 批註bean方法vs字段
- 6. 休眠:@GeneratedValue(策略= GenerationType
- 7. 有沒有辦法來重寫繼承的生成策略?
- 8. 有沒有辦法清除uipickerview選擇?
- 9. 有沒有辦法做或jQuery選擇
- 10. JPA @GeneratedValue和@Id
- 11. 有沒有辦法在webpack中完全忽略動態需求?
- 12. 有沒有辦法將Postgres的UUID生成與Hibernate的IDENTITY ID生成策略一起使用?
- 13. JPA/Hibernate:子類型與策略'模式'
- 14. 有沒有辦法讓@ModelAttribute動態?
- 15. 有沒有辦法使用Hibernate有條件地插入?
- 16. 有沒有辦法使用OnMouseOver來選擇一個radgrid行?
- 17. JPA與SequenceGenerator和GeneratedValue
- 18. CSS選擇器:有沒有辦法選擇周圍的元素?
- 19. Spring + JPA + Hibernate:啓動時沒有插入
- 20. UIActivityViewController - 有沒有辦法知道選擇了哪個活動?
- 21. 有沒有辦法在選擇查詢中動態生成SQL列?
- 22. 有沒有辦法在Endeca中動態定義和註冊新的Dgraphs
- 23. 沒有辦法做這樣的選擇
- 24. 有沒有辦法使用iTextSharp合併動態XFA文檔
- 25. 有沒有辦法在AQL中使用動態集合名稱?
- 26. 有沒有辦法將Thickbox與動態內容一起使用?
- 27. 有沒有辦法使用Resque動態加載Ruby庫?
- 28. 有沒有辦法動態設置Highchart選項?
- 29. 有沒有辦法做這個查詢沒有子選擇?
- 30. 有沒有辦法在Coldfusion中有選擇地啓用會話?
它是如何配置的,我還沒有找到一個如何更改SequenceStyleGenerator的increment_size的例子? 傳遞給configure方法的參數是cfg.xml中設置的屬性的有限集合。優化器和increment_size不會傳遞給我的最大努力。 –
'@SequenceGenerator(...,allocationSize = blah)' –
感謝您的建議。但是它似乎是一個快捷方式,因爲SequenceGenerator沒有SequenceStyleGenerator中提到的相同的配置屬性。 我試過這個,它與Pooled Optimizer一起工作,它給了我期待的性能優勢。 但爲了關閉。有沒有辦法在cfg.xml文件中做到這一點。在調試時,SequenceStyleGenerator.java上的「optimizer」和「increment_size」沒有被hibernate讀取。 http://stackoverflow.com/questions/19694154/hibernate-cfg-xml-configuration-for-sequence-generator –