创建实体Microsoft SQL Server IDENTITY_INSERT时出错

时间:2017-02-06 09:49:41

标签: sql-server hibernate jhipster

我正在使用JHipster 4.我创建了一个简单的实体,只需使用" name"属性,当我尝试从UI创建实体时,我得到了以下错误。 (我使用的是Microsoft SQL Server)。 认为错误的重要部分是:

  

引起:com.microsoft.sqlserver.jdbc.SQLServerException:无法在表' tenant'中为标识列插入显式值。当IDENTITY_INSERT设置为OFF时。

1 个答案:

答案 0 :(得分:1)

直接回答似乎是您只需要根据此链接配置jhipster以启用identity_inserthttps://jhipster.github.io/tips/004_tip_using_ms_sql_server.html

  

添加identityInsertEnabled =" true"与包含IDENTITY_INSERT ON和IDENTITY_INSERT OFF的Inserts相同,这将允许您直接插入项目自动生成的标识。这就是我们使用MS SQL Server Liquibase for。

的原因

错误告诉您需要知道的一切。您正尝试insert identity列中的值。这是不允许的,因为该列应该自动填充,除非您暂时将其明确关闭。

identity_insert所在的文档:https://msdn.microsoft.com/en-us/library/ms188059.aspx

您可以使用命令set identity_insert SchemaName.TableName off将其关闭,但您最好确信insert正确的数据。

我建议您与管理数据库的人进行一些调查,了解该列为identity列的原因以及您是否应insert进入该列。

假设一个表:

create table test(ID   int identity(1,1)
                 ,Name nvarchar(100)
                 )

所有这些insert语句都会引发错误:

insert into test(ID,Name)
select ID
      ,Name
from OtherTable

insert into test(ID,Name)
select null as ID
      ,'TestName' as Name

insert into test(ID,Name)
values(99
      ,'Name'
      )

虽然这些可行,但会自动为ID列生成新的唯一值:

insert into test(Name)
select Name
from OtherTable

insert into test(Name)
select 'TestName' as Name

insert into test(Name)
values('Name')

简而言之,您需要在insert列中identity 。不是空白字符串,不是null值,但绝对没有。