繁体   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