【问题标题】:Error when setting IDENTITY_INSERT on sql server table在 sql server 表上设置 IDENTITY_INSERT 时出错
【发布时间】:2015-03-11 16:14:41
【问题描述】:

正如我在这篇帖子 JPA SET IDENTITY_INSERT not working 中提到的,我成功使用了

SET IDENTITY_INSERT

为我的目的查询。但是今天在我设法配置连接池之后,我遇到了这种类型的错误。

java.sql.SQLException: IDENTITY_INSERT is already ON for table 'mydb.dbo.[table1]'. Cannot perform SET operation for table 'dbo.[table2]'.
2015-03-11 15:52:36,126 WARN  org.hibernate.util.JDBCExceptionReporter.logExceptions:233 - SQL Error: 544, SQLState: 23000
2015-03-11 15:52:36,127 ERROR org.hibernate.util.JDBCExceptionReporter.logExceptions:234 - Cannot insert explicit value for identity column in table '[table2]' when IDENTITY_INSERT is set to OFF.
2015-03-11 15:52:36,128 ERROR   org.hibernate.event.def.AbstractFlushingEventListener.performExecutions:324 - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at     org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)

任何人都可以提出解决此错误的建议吗?

【问题讨论】:

    标签: java sql-server hibernate jpa


    【解决方案1】:

    使用Identity Insert是一个对称命令,开启后必须关闭。例如。

    Set Identity_Insert ErrorLog On
    
    Insert  Into ErrorLog
            ( LineNumber, ErrorMessage )
    Values  ( 0, 'Test 1' ) ,
            ( 1, 'Test 2' )
    
    Set Identity_Insert ErrorLog Off
    

    希望对您有所帮助。

    【讨论】:

    • 是的,我正在这样做,并且两人正在结束我的插入操作。但是当另一笔交易发生时,就会出现上述错误。
    • 不知道该告诉你什么。 SQL 认为它仍在运行。我的回答是基于您原始帖子中的错误。您在评论中提到“......当另一个事务发生时......”,这个事务是否在同一个连接上,它是否在您将 Identity_Insert 设置回关闭之前运行?如果是,您需要将另一个事务放在不同的连接上,或者确保它等到 Identity_Insert 重新设置为关闭。
    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多