2016-07-31 4 views
0

私は、CardというクラスからColorというクラスへのManyToMany関係を持っています。 JPAとHibernateを使用しています。JPA ManyToMany固有の属性を持つ関係

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; 
} 

しかし、私はカードのjavaを持続していた場合黒は既に色に含まれているため、例外がスローされます。

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

しかし、私はColors.nameが一意になりたいとJPAは色がすでに永続化される場合の色を検索し、永続色を使用する必要があります。

+0

それはあなたの仕事で、JPAは「色が既に持続している場合はカラーを検索」しません。 JPAはあなたがそれを与えることを維持するためにそこにある –

+0

ああ大丈夫。この事実を知らなかった:/ – Implex1v

答えて

0

だから、私はあなたがOneToMany関係が必要だと思うし、このように、Colorクラスに提出された新しいを追加します。

@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

私はそれについて言及しなかったが、カードはより多くの色を持つことができます。文脈は魔法のカードです。あなたがそれらを知っているなら、私は知らない: – Implex1v

+0

@ Implex1v Ok、私の答えを編集しました –

関連する問題