使用Hibernate POJO的SQL外键错误

时间:2017-02-25 18:45:17

标签: java sql sql-server hibernate

我们有以下情况: 我们使用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个表来修复外键错误?

1 个答案:

答案 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 );

希望有所帮助。