我正在尝试映射以下内容:
public class Person{
...
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "person_categories", joinColumns = @JoinColumn(name = "personId"), inverseJoinColumns = @JoinColumn(name = "categoryId"))
private Set<Category> categories
...
}
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "categoryId")
private Integer id;
@Column(unique = true)
private Sting name
...
}
当我尝试保存Person对象时,会插入类别,但会将重复项存储到表中。如何确保每个类别在其表中是唯一的,同时保持传递持久性?我尝试使名称列唯一,但这只会通过抛出约束错误来帮助。
答案 0 :(得分:1)
如果你没有覆盖hashCode()和equals()对 Category 类有意义,那么你将在你的Set中获得重复项(如果你要添加重复项) 。如果 name 字段用于区分对象,请尝试:
public int hashCode() {
return name.hashCode();
}
public Object equals (Object o) {
if (o instanceof Category) {
return ((Category)o).name.equals(this.name);
}
return false;
}