2016-03-29 7 views
0

Ich muss eine Karte mit einem Basisschlüssel und einem Entity-Wert beibehalten. dies läuft, wenn ich versuche, nicht die gleiche zweite Einheit zweimal hinzuzufügen:Wie man eine ManyToMany Map <Basic, Entity> mit JPA (Eclipselink) abbildet

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

aber wenn ich versuche, (year1: secondE_1, year2: secondE_1) meine app wirft dies:

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 

scheint Der Mapkey wird nicht ordnungsgemäß verwendet. Ich habe einige andere Anmerkungen und endlose Google-Suchen versucht, aber nichts scheint zu arbeiten.

bitte helfen Sie mir.

+0

EclipseLink lässt standardmäßig keine Duplikate in Sammlungen zu, obwohl dies hier funktionieren sollte. Sie müssen Ihre DDL für die Join-Tabelle ändern, damit der Zuordnungsschlüssel und die Fremdschlüssel als zusammengesetzte PK verwendet werden. – Chris

Antwort

0

am Ende habe ich ein junction-helper-object dazwischen installiert.

die FirstEntity inverse bildet die Liste:

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

die SecondEntityJunction enthält den übergeordneten Schlüssel, das Jahr und die secondEntity FK:

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

, die es ist.

Verwandte Themen