我正在使用JHipster 4.我创建了一个简单的实体,只需使用" name"属性,当我尝试从UI创建实体时,我得到了以下错误。 (我使用的是Microsoft SQL Server)。 认为错误的重要部分是:
引起:com.microsoft.sqlserver.jdbc.SQLServerException:无法在表' tenant'中为标识列插入显式值。当IDENTITY_INSERT设置为OFF时。
答案 0 :(得分:1)
identity_insert
:https://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
值,但绝对没有。