1

私はHibernate @OneToManyとの間に関係が Table1あります。は所有者であり、関係は一方向です。私は にマップ していません。Table2Table1Table2Table1

そのため、このマッピングCollectionTable2 インスタンスのを定義しました。@OneToManyそして、私はすべてをカスケードしています。

この「シナリオ」では、 Table2インスタンスのコレクションを追加しようtable2_aとしており、オブジェクトに 関連しているtable2_bとします。table2_cTable1table1

所有者クラスのインスタンスを保存するときにこの挿入を行う方法はありますか?table1したがって、依存クラスのインスタンスがありtable2_a、カスケードtable2_bに保存されますか? table2_cこれを行おうとすると、エラーが発生します

Duplicate entry '23' for key ...

Hibernate は、セッション内の対応するインスタンスに対して生成さ れた同じキー値でtable2_a、すべてを保存しようとしてtable2_bいます。では、ここの「多」側を使用するにはどうすればよいですか?table2_cTable2Table1@OneToMany

関係の反対側の 、 on にTable2Table1マッピングせずに、一方向マッピングをそのまま使用してこの挿入を行う方法はありますか? @ManyToOneテーブルを明るく保ちたいと思っています。

コードはコレクション内の単一のインスタンスの挿入に取り組んでおりTable2、それ以外はすべて問題ありません。

//===========================

編集:コードの関連部分:

で定義された関係Table1-- エンティティ クラス:

@OneToMany(cascade = CascadeType.ALL)
private Collection<Table2> table2Inst = new ArrayList<>();
// getter & setter

pojo で保存を行うコード:

    table1 = (Table1)session.get(Table1.class, theId);

    if ( table1!=null ) {
        table1.getTable2Inst().addAll(contactsList);
        session.saveOrUpdate(table1);  
    }

注:エンティティクラスですべて定義しています。マッピング ファイルには何もありません。

4

1 に答える 1

0

mappedBy = "table1Id"その1対多に何かを追加する必要はありませんでしたか?このような。

@OneToMany(cascade = CascadeType.ALL, mappedBy = "table1Id");//table1Id is foreign key of table1 in table2
private Collection<Table2> table2Inst = new ArrayList<>();

contactsListすべての新しいオブジェクトから構成されていることを確認しましたnew table2()か?

于 2014-04-09T00:48:29.587 に答える