java spring 在数据库中添加对象时出错

java spring error adding object in Database

我试图在数据库中插入一行,但在保存对象时出现此错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Violation of UNIQUE KEY constraint 'SITE_NAME_UNIQUE'. Cannot insert duplicate key in object 'dbo.SITE'. The duplicate key value is (114, TEST30042015SITEREQUEST).

但是这个值在数据库中不存在。 有人有想法吗?

创建 table dbo.site 的脚本,由 sql 服务器管理

生成
CREATE TABLE [dbo].[SITE](
[SITE_ID] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[SITE_BUSINESS_ID] [bigint] NOT NULL,
[SITE_STATUS_ID] [bigint] NOT NULL,
[SITE_COUNTRY_ID] [bigint] NOT NULL,
[SITE_NAME] [varchar](40) NOT NULL,
[SITE_ADDRESS] [varchar](250) NULL,
[SITE_LOCAL_IT] [bigint] NULL,
[SITE_RIF] [bigint] NULL,
[SITE_USER_NUMBER] [bigint] NULL,
[SITE_LOCAL_IT_PHONE] [varchar](20) NULL,
[SITE_SUBNET] [varchar](30) NOT NULL,
[SITE_ANALOG_PHONE_NUMBER] [varchar](20) NULL,
[SITE_COMMENT] [varchar](400) NULL,
[SITE_ENTITY_CODE] [bigint] NOT NULL,
[SITE_INVOICE_CODE] [bigint] NOT NULL,
[SITE_LOCAL_CONTACT] [bigint] NULL,
[SITE_END_DATE] [datetime] NULL,
 CONSTRAINT [SITE_PK] PRIMARY KEY CLUSTERED 
(
[SITE_ID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [SITE_NAME_UNIQUE] UNIQUE NONCLUSTERED 
(
[SITE_COUNTRY_ID] ASC,
[SITE_NAME] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_BUSINESS_FK] FOREIGN KEY([SITE_BUSINESS_ID])
 REFERENCES [dbo].[BUSINESS] ([BUS_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_BUSINESS_FK]
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_COUNTRY_FK] FOREIGN KEY([SITE_COUNTRY_ID])
REFERENCES [dbo].[COUNTRY] ([CTRY_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_COUNTRY_FK]
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_STATUS_FK] FOREIGN KEY([SITE_STATUS_ID])
REFERENCES [dbo].[STATUS] ([STA_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_STATUS_FK]
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_USER_2_FK] FOREIGN KEY([SITE_RIF])
REFERENCES [dbo].[USERS] ([USER_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_USER_2_FK]
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_USER_3_FK] FOREIGN KEY([SITE_LOCAL_CONTACT])
REFERENCES [dbo].[USERS] ([USER_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_USER_3_FK]
GO

ALTER TABLE [dbo].[SITE]  WITH CHECK ADD  CONSTRAINT [SITE_USER_FK] FOREIGN KEY([SITE_LOCAL_IT])
REFERENCES [dbo].[USERS] ([USER_ID])
GO

ALTER TABLE [dbo].[SITE] CHECK CONSTRAINT [SITE_USER_FK]
GO

此函数将我的对象添加到数据库中:

@Override
public void saveSite(ISite siteObj){
    Assert.notNull(siteObj);
    merge((Site) siteObj);
}

您对 [SITE_COUNTRY_ID] 和 [SITE_COUNTRY_ID] 的组合有唯一约束 [SITE_NAME].

您正尝试插入一行 SITE_NAME 为 'TEST30042015SITEREQUEST' 且 SITE_COUNTRY_ID 为 114 的行,而该行已经存在

您正在尝试以违反此约束的方式更新现有行。