java spring错误在Database中添加对象

时间:2015-04-30 13:11:40

标签: java sql spring jdbc

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

  

引起:com.microsoft.sqlserver.jdbc.SQLServerException:违规   UNIQUE KEY约束'SITE_NAME_UNIQUE'。无法插入重复   对象'dbo.SITE'中的键。重复的键值是(114,   TEST30042015SITEREQUEST)。

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

脚本创建表dbo.site,由sql server managment生成

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

此函数在db:

中添加我的对象
@Override
public void saveSite(ISite siteObj){
    Assert.notNull(siteObj);
    merge((Site) siteObj);
}

1 个答案:

答案 0 :(得分:0)

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

您正尝试插入一行SITE_NAME为'TEST30042015SITEREQUEST'且SITE_COUNTRY_ID为114时已存在

OR

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