2016-07-31 131 views
0

我有一個ManyToMany關係從名爲Card的類到名爲Color的類。我正在使用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好的,編輯我的答案 –

相關問題