我们正在使用Hibernate 保存方法在具有标识列的 SQL Server表中插入数据。
@GeneratedValue(strategy=GenerationType.AUTO)
使用注释,我们能够插入数据,并且标识列也会增加。
问题是:如果由于任何原因在表中插入失败,那么标识列的值也会递增。因此,下一次成功插入需要+2值。例如首次成功插入导致Identity列值为1.
第二次插入失败了。
第三次成功插入导致标识列值为3而不是2。
这似乎是一个常见问题,因为Hibernate save方法会立即返回生成的id。请建议一个最佳备用解决方案,以便在出现故障时不会增加标识列值。
答案 0 :(得分:0)
据我所知,此问题的唯一解决方案是您必须通过应用程序明确地为对象分配ID,而不是让hibernate或数据库为您生成。
为了做到这一点,
@GeneratedValue
注释,而只使用@Id
。assign
指定为生成器类,例如<generator class="assigned">
。现在:
int
或long
而不是serial
。