我有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帖子,表明这是其他一些可能的解决方法。