2016-03-29 11 views
0

基本キーとエンティティ値を使用してマップを保持する必要があります。これは私が二度同じ第二のエンティティを追加しようとしていない場合は、実行します:ManyToManyマップ<Basic、Entity>とJPA(eclipselink)のマッピング方法

@ManyToMany 
@JoinTable(name="THIRD_TABLE") 
@MapKeyColumn(name="INTEGER_COLUMN", table="THIRD_TABLE") 
private Map<Integer, SecondEntity> secondEntities = new HashMap<>(); 

が、私は(YEAR1:secondE_1、YEAR2:secondE_1を)しようとすると私のアプリはこれをスロー:

java.sql.SQLException: Violation of unique constraint SYS_PK_294: 
duplicate value(s) for column(s) FIRSTENTITY_ID,SECONDENTITY_ID in statement [INSERT INTO COVERANALYSIS_EXPENSERECORDSETS (secondentity_id, firstentity_id, INTEGER_COLUMN) VALUES (?, ?, ?)] 
Error Code: -104 

は以下のように思えますmapkeyは必要に応じて使用されません。私はいくつかの他の注釈と無限のGoogle検索を試しましたが、何も動作していないようです。

私を助けてください。

+0

EclipseLinkではデフォルトでコレクションに重複を許可していませんが、ここで動作するはずです。マップキーと外部キーが複合PKとして使用されるように、結合テーブルのDDLを変更する必要があります。 – Chris

答えて

0

私は間にジャンクションヘルパーオブジェクトをインストールしました。

FirstEntity逆変換リストをマップ:

@ManyToOne 
private FirstEntity firstEntity; 
private int year; 
private SecondEntity secondEntity; 

それだ:

@OneToMany(mappedBy="firstEntity", cascade = CascadeType.ALL) 
private List<SecondEntityJunction> secondEntities; 

SecondEntityJunctionは、親キー、年secondEntity FKが含まれています。

関連する問題