【发布时间】:2015-07-10 05:05:37
【问题描述】:
我正在尝试在数据库中插入一行,但保存对象时出现此错误:
原因:com.microsoft.sqlserver.jdbc.SQLServerException: Violation UNIQUE KEY 约束“SITE_NAME_UNIQUE”。不能插入重复 键入对象“dbo.SITE”。重复键值为 (114, TEST30042015SITEREQUEST)。
但该值在数据库中不存在。 有人有想法吗?
创建表 dbo.site 的脚本,由 sql server 管理生成
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);
}
【问题讨论】:
-
由于错误提示表中已经存在一个与您尝试插入的名称相同的站点
-
或者您尝试使用相同的键插入 2 行
-
请为 dbo.SITE 表添加创建脚本,或者至少说明 SITE_NAME_UNIQUE 中包含哪些列。
-
@Aツ 是,但该值在数据库中不存在,key 是自动生成的,最后一个 id 正常
-
请为我们提供一个 ddl 和任何插入表格的代码