0

我正在尝试映射以下内容:

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 对象时,会插入类别,但会将重复项存储到表中。如何确保每个类别在其表中是唯一的,同时保持传递持久性?我尝试使 name 列唯一,但这只能通过抛出约束错误来帮助。

4

1 回答 1

1

如果您没有覆盖 hashCode() 和 equals() 以对Category类有意义,那么您将在 Set 中获得重复项(如果您要添加重复项开始)。如果名称字段是区分对象的原因,请尝试:

public int hashCode() {
    return name.hashCode();
}

public Object equals (Object o) {
    if (o instanceof Category) {
        return ((Category)o).name.equals(this.name);
    }
    return false;
}
于 2009-01-28T03:15:03.750 回答