我们有以下情况: 我们使用Java的Hibernate将POJO-Classes写入数据库。 这些类注释如下:
@Entity
@Table(name = "dbo.SaveEvents")
写入数据库时会出现以下错误(表:dbo.CodeDocuments
)
WARN: SQL Error: 547, SQLState: 23000 Feb 06, 2017 2:06:42 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions ERROR: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_SaveEvents_CodeDocuments". The conflict occurred in database "OSBLEPlus_eclipse", table "dbo.CodeDocuments", column 'Id'. org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:112)
我们尝试通过添加以下内容来满足外键约束:
@SecondaryTable(name = "dbo.CodeDocuments")
但这并不能解决我们的问题。我们也没有找到很多关于如何正确使用SecondaryTable
注释的信息。映射FK< - > PK如下:
CodeDocuments.sql:
CREATE TABLE [dbo].[CodeDocuments] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FileName] VARCHAR (MAX) NOT NULL,
[Content] VARCHAR (MAX) NOT NULL,
CONSTRAINT [PK_CodeDocuments_Id] PRIMARY KEY CLUSTERED ([Id] ASC)
);
SaveEvents.sql:
CREATE TABLE [dbo].[SaveEvents] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[EventLogId] INT NOT NULL,
[EventDate] DATETIME NOT NULL,
[SolutionName] VARCHAR (MAX) NOT NULL,
[DocumentId] INT NOT NULL,
CONSTRAINT [PK_SaveEvents] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_SaveEvents_EventLogs] FOREIGN KEY ([EventLogId]) REFERENCES [dbo].[EventLogs] ([Id]),
CONSTRAINT [FK_SaveEvents_CodeDocuments] FOREIGN KEY ([DocumentId]) REFERENCES [dbo].[CodeDocuments] ([Id])
);
如何使用Hibernate POJO同时插入2个表来修复外键错误?
答案 0 :(得分:0)
您只需要确保首先由关联的CodeDocument
实体保留您的SaveEvents
实体:
CodeDocument codeDocument = new CodeDocument();
// set the values
session.save( codeDocument );
SaveEvents saveEvents = new SaveEvents();
// set the values
saveEvents.setDocument( codeDocument );
session.save( saveEvents );
希望有所帮助。