我们有以下情况: 我们使用 Java 的 Hibernate 将 POJO-Classes 写入数据库。类注释如下:
@Entity
@Table(name = "dbo.SaveEvents")
写入数据库时,我们得到以下错误(表:dbo.CodeDocuments
)
警告:SQL 错误:547,SQLState:23000 2017 年 2 月 6 日下午 2:06:42 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 错误:INSERT 语句与 FOREIGN KEY 约束“FK_SaveEvents_CodeDocuments”冲突。冲突发生在数据库“OSBLEPlus_eclipse”、表“dbo.CodeDocuments”、“Id”列中。 org.hibernate.exception.ConstraintViolationException:无法 在 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 个表?
您只需要确保首先保留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 );
希望能有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句