簡體   English   中英

使用SQL Server標識列的休眠保存方法

[英]Hibernate Save method with SQL Server Identity column

我們正在使用Hibernate Save方法在具有標識列的SQL Server表中插入數據。

@GeneratedValue(strategy=GenerationType.AUTO) 

使用了注釋,並且我們能夠插入數據,並且標識列也逐漸增加。

問題是:如果由於某種原因在表中插入失敗,則標識列的值也會增加。 因此,下一次成功插入的值為+2。 例如,第一次成功插入會導致Identity列值為1。
第二次插入失敗。
第三次成功插入導致標識列的值為3而不是2。

這似乎是一個常見問題,因為Hibernate save方法會立即返回生成的ID。 請提出一個最佳的替代解決方案,以使標識列值不會因失敗而增加。

據我所知,解決此問題的唯一方法是您必須通過應用程序顯式地為對象分配ID,而不是讓休眠或數據庫為您生成ID。

為此,

  1. 在基於注釋的方法中,只需刪除@GeneratedValue注釋,而僅使用@Id
  2. 在基於映射文件的方法中,將assign為生成器類,例如<generator class="assigned">

現在:

  1. 創建自己的算法以生成唯一的主鍵。
  2. 將主鍵設置為intlong而不是serial
  3. 從算法中獲取一個數字。
  4. 使用它作為對象的ID。

暫無
暫無

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

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