当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值。

当对数据库中的表进行插入操作时,有时候会出现这个异常。处理这个异常可以从两个方面触发:

  1. 数据库sql语句 。
  2. 修改Hibernate中持久化类映射配置文件中的主键生成策略。

一:数据库sql语句:

问题描述:当将数据库表主键设计为 (Orderid int identity primary key),相对这个主键IDENTITY_INSERT默认设置为OFF,就是不能够显示插入主键id的值,例子如下:

insert into t_notice ( id , createTime ) values (1,'2014-10-01 00:00:00')

执行上面语句会提示一个错误:
服务器: 消息 544,级别 16,状态 1,行 1
当 IDENTITY_INSERT 设置为 OFF 时,不能向表 ‘notice ’ 中的标识列插入显式值。

修改方法如下:
–允许将显式值插入表的标识列中 ON-允许 OFF-不允许

set identity_insert notice ON--打开
set identity_insert notice OFF--关闭

注意:
当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值
–问题注意

(1)任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表

(2)如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用

(3)SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置

二:修改配置文件

在实体类的hibernate配置文件中,将主键生成策略改为如下:

<generator class="native"></generator>

你可能感兴趣的:(主键,identity,IDENTITY-I)