2017-02-25 10 views
0

次のような状況があります。 JavaのHibernateを使用してPOJOクラスをデータベースに書き出します。 クラスは次のように注釈されています。データベースへの書き込み時に私たちは、次のエラーを取得するHibernate POJOを使用したSQL外部キーエラー

@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

FK <-> PK関係のいくつかのタイプを持つ、一緒に挿入しようとしている2つのエンティティの完全なマッピングを投稿する必要があります。 – Naros

+0

2つのエンティティ(SQLコード)の完全なマッピングを投稿しました – OSBLE

答えて

0

あなたは、単にあなたが最初に関連するSaveEventsエンティティによってfolllowedあなたCodeDocumentエンティティ持続を確認する必要があります役立ちます

CodeDocument codeDocument = new CodeDocument(); 
// set the values 
session.save(codeDocument); 

SaveEvents saveEvents = new SaveEvents(); 
// set the values 
saveEvents.setDocument(codeDocument); 
session.save(saveEvents); 

希望を。

+0

これはうまくいくようです。 – OSBLE

関連する問題