我遇到了MSSQL ID跳转功能的问题。
我的要求就像,我需要生成一个序列号,从1000开始逐个递增,我的应用程序托管在多个服务器上并指向同一个DB.Multiple主机与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
为了解决这个问题,我添加了一个hibernate属性,并且它可以很好地对抗ID跳转。
<property name="hibernate.id.new_generator_mappings" value="true"/>
现在真正的问题是现有的实体,自动生成策略已经变得像
一样异常无法在表'USER'中为identity列插入显式值 IDENTITY_INSERT设置为OFF。
IDENTITY_INSERT is set to OFF
同样的修复。请您建议一个更好的选项来生成序列号 这应该是独特的。
提前致谢
答案 0 :(得分:1)
听起来你正在经历的是this,而不是与Hibernate相关的任何内容。
在SQL Server配置管理器中,右键单击右窗格中的实例名称,然后单击“属性”,再单击“启动参数”
在&#34;指定启动参数&#34;输入-T272
以设置272跟踪标记。
我感到困惑和沮丧,但最终,你不应该担心下一个identity
价值会是什么。
还有一个已关闭的Microsoft Connect帖子,表明这是其他可能的解决方法。
答案 1 :(得分:1)
在sql server中,除非在insert语句之前指定SET IDENTITY_INSERT <yourTableName> ON
,否则不能为标识列插入值。