2016-07-31 3 views
0

Ich habe eine ManyToMany-Beziehung von einer Klasse namens Card zu einer Klasse namens Color. Ich verwende JPA und Hibernate.JPA ManyToMany-Beziehung mit eindeutigem Attribut

Card.java

@Entity(name = "Cards") 
public class Card 
{ 
    @Id 
    @Column(name = "card_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long cardId; 

    @ManyToMany(cascade = CascadeType.ALL) 
    private List<Color> colors; 
} 

Color.java

@Entity(name = "Colors") 
public class Color 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long colorId; 

    @Column(unique = true) 
    private String name; 
} 

Aber wenn ich eine Karte java bin persistierenden löst eine Ausnahme, weil Schwarz bereits in Farben enthalten ist.

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Black' for key 'UK_sd7tby3rtx8snv2vlbmlmy69o' 

Aber ich will Colors.name einzigartig sein und JPA sollten Farben suchen, wenn die Farbe bereits beibehalten wird und die beibehaltenen Farbe.

+0

JPA nicht „Farben suchen, wenn Farbe ist bereits bestanden“, das ist Ihre Aufgabe. JPA ist da um zu bestehen, was du gibst –

+0

Oh ok. Wusste diese Tatsache nicht:/ – Implex1v

Antwort

0

Also, ich glaube, Sie brauchen OneToMany Beziehung und fügen Sie neue eingereicht Color Klasse, wie folgt aus:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "card") 
private List<Color> colors; 

//Add to `Color`class 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "card_id", nullable = false) 
private Card card; 
+0

Ich habe es nicht erwähnt, aber eine Karte kann mehr Farben haben. Der Kontext sind magische Karten. Ich weiß nicht, wenn Sie sie kennen :) – Implex1v

+0

@ Implex1v Ok, meine Antwort bearbeitet –