我有MSSQL ID跳跃功能的问题。

我的需求是,我需要生成一个序列号,例如从1000开始并逐个递增,并且我的应用程序托管在多个服务器中并指向同一个DB。多个主机与Nginx保持平衡。

为此,用SequenceGenerator编写了一个实体类

@Entity
@SequenceGenerator(name = "IdSequence",
sequenceName = " ID_GEN",
allocationSize = 1)
public class Example implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;


    @Id
    @GeneratedValue(generator = " IdSequence ")
    private long id ;

}


而且效果很好。当我重新启动数据库时,下一个ID跳到current+1000
为了解决这个问题,我添加了一个休眠属性,它可以很好地防止ID跳跃。

<property name="hibernate.id.new_generator_mappings" value="true"/>


现在真正的问题是,具有自动生成策略的现有实体已经出现异常,例如


  在以下情况下,无法为表“ USER”中的标识列插入显式值
  IDENTITY_INSERT设置为OFF。



有什么办法可以解决JPA / Hibernate中的ID跳跃问题
我要如何避免IDENTITY_INSERT is set to OFF
相同的解决方法。



  您能否建议一个更好的选项来生成序列号
  那应该是独一无二的。


提前致谢

最佳答案

听起来您正在体验的是this,而不是与Hibernate相关的任何东西。

在SQL Server配置管理器中,右键单击右窗格上的实例名称,然后依次单击“属性”和“启动参数”。
在“指定启动参数”上,输入-T272设置272跟踪标志。

我感到困惑和沮丧,但最终,您不必真正担心下一个identity值将是什么。

还有一个封闭的Microsoft Connect帖子,表明这是其他一些可能的解决方法。

10-04 10:09