当 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>
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值