簡體   English   中英

javax.persistence.SequenceGenerator.allocationSize()應該與INCREMENT BY一致嗎?

[英]Should javax.persistence.SequenceGenerator.allocationSize() be consistent with INCREMENT BY?

我有一個使用Hibernate javax.persistence.SequenceGenerator.allocationSize()屬性的問題。 當它設置為1時,我在向數據庫插入大量記錄時遇到性能問題。 否則,當我將其設置為默認值(50)或更高值時,我會收到異常,即具有指定標識符的實體已存在!

最大的問題是很多開發人員使用共享數據庫,因此生成的標識符實際上可能無法同步。

另一方面,我注意到使用“INCREMENT BY 1”創建的Oracle序列。 可以相應地設置這個,allocateSize可以解決問題嗎?

我使用的是WildFly 10.1(所以Hibernate版本是5.0.10)和Oracle 12c(12.2.0.1)。

提前感謝您的建議!

是的, SequenceGeneratorallocationSize的值以及數據庫遞增序列的步驟必須相同。

如果將allocationSize屬性設置為50,則告訴Hibernate序列增加50並且在從序列中選擇下一個值之前它將在內部生成49個值。

如果保持allocationSize和序列的增量同步,則無需擔心重復的ID。

我們說吧; 你有2台服務器連接到同一個數據庫。 兩個服務器都使用50的allocationSize ,並且您將數據庫序列配置為增加50。

Server1從序列中請求一個新值並獲得1000.它將在內部存儲該值並將其遞增直到達到1049。

在此期間,Server2從序列中請求一個新值並獲得1050.它將該值遞增到1099。

數據庫序列返回的下一個值將是1100.如您所見,將沒有重復的ID。 但主鍵值之間可能存在間隙,您無法使用它們按時間順序排序數據庫記錄。 但你不應該使用主鍵...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM