【发布时间】:2016-07-31 11:47:59
【问题描述】:
我有一个从名为 Card 的类到名为 Color 的类的多对多关系。我正在使用 JPA 和 Hibernate。
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;
}
颜色.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 应该搜索 Colors 并使用持久化的颜色。
【问题讨论】:
-
JPA 不会“如果颜色已经存在,则搜索颜色”,那是你的工作。 JPA 会坚持你给它的东西
-
哦,好的。不知道这个事实:/
-
我有同样的问题,我开始认为解决这个问题的唯一好方法是手动将连接表创建为实体,使用两个 OneToMany 关系,并使用 Hibernate 的事件系统来执行唯一的手动检查/修复,这是不幸的
标签: hibernate jpa many-to-many