第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

休眠,@ SequenceGenerator和allocationSize

休眠,@ SequenceGenerator和allocationSize

瀟瀟雨雨 2019-10-16 11:17:35
我們都知道使用Hibernate時的默認行為@SequenceGenerator-它使實際數(shù)據(jù)庫序列增加一,將該值乘以50(默認allocationSize值)-然后將該值用作實體ID。這是錯誤的行為,并與說明以下內(nèi)容的規(guī)范沖突:distributionSize-(可選)從序列中分配序列號時要增加的數(shù)量。需要明確的是:我不關(guān)心生成的ID之間的差距。我關(guān)心與基礎(chǔ)數(shù)據(jù)庫序列不一致的 ID 。例如:任何其他應(yīng)用程序(例如,使用純JDBC)可能要在從序列獲得的ID下插入新行-但所有這些值可能已被Hibernate使用!瘋狂。有人知道任何解決此問題的方法(沒有設(shè)置allocationSize=1,從而降低性能)嗎?編輯:弄清楚。如果最后插入的記錄的ID = 1,則HB同時51, 52, 53...在其新實體BUT中使用值:數(shù)據(jù)庫中序列的值將設(shè)置為2。當其他應(yīng)用程序使用該序列時,很容易導致錯誤。 另一方面:規(guī)范(據(jù)我所知)說數(shù)據(jù)庫序列應(yīng)該設(shè)置為51,同時HB應(yīng)該使用范圍內(nèi)的值  2, 3 ... 50更新: 正如下面的史蒂夫·埃伯索爾(Steve Ebersole)所述:通過設(shè)置可以啟用我描述的行為(也是許多人中最直觀的行為)hibernate.id.new_generator_mappings=true。謝謝大家。更新2:對于將來的讀者,您可以在下面找到一個有效的示例。@Entity@Table(name = "users")public class User {    @Id    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ")    @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS")    private Long id;}persistence.xml<persistence-unit name="testPU">  <properties>    <property name="hibernate.id.new_generator_mappings" value="true" />  </properties></persistence-unit>
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經(jīng)驗 獲得超7個贊

絕對清楚...您所描述的內(nèi)容與規(guī)范沒有任何沖突。該規(guī)范討論的是Hibernate分配給您的實體的值,而不是實際存儲在數(shù)據(jù)庫序列中的值。


但是,可以選擇要獲取的行為。首先看到我的答復:是否有一種方法可以使用JPA批注和Hibernate動態(tài)選擇@GeneratedValue策略? 這將為您提供基礎(chǔ)知識。只要您設(shè)置為使用該SequenceStyleGenerator,Hibernate就會使用SequenceStyleGenerator中allocationSize的“池優(yōu)化器”進行解釋。“池優(yōu)化器”用于允許在創(chuàng)建序列時使用“增量”選項的數(shù)據(jù)庫(并非所有支持序列的數(shù)據(jù)庫都支持增量)。無論如何,請閱讀那里的各種優(yōu)化器策略。


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關(guān)注
  • 1240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號