2016-07-31 82 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好的,编辑我的答案 –