ID跳转问题与MSSQL和Hibernate

时间:2015-11-25 04:37:51

标签: java sql-server spring hibernate jpa

我遇到了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。

  • 有没有办法解决JPA / Hibernate中的ID跳转问题
  • 如果我愿意,我该如何避免IDENTITY_INSERT is set to OFF 同样的修复。
  

请您建议一个更好的选项来生成序列号   这应该是独特的。

提前致谢

2 个答案:

答案 0 :(得分:1)

听起来你正在经历的是this,而不是与Hibernate相关的任何内容。

在SQL Server配置管理器中,右键单击右窗格中的实例名称,然后单击“属性”,再单击“启动参数” 在&#34;指定启动参数&#34;输入-T272以设置272跟踪标记。

我感到困惑和沮丧,但最终,你不应该担心下一个identity价值会是什么。

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

答案 1 :(得分:1)

在sql server中,除非在insert语句之前指定SET IDENTITY_INSERT <yourTableName> ON,否则不能为标识列插入值。