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オブジェクトを保存しようとすると、カテゴリが挿入されますが、重複がテーブルに保存されます。推移的な永続性を維持しながら、各カテゴリがそのテーブル内で一意であることを確認するにはどうすればよいですか?名前の列を一意にしようとしましたが、それは制約エラーをスローすることによってのみ役立ちました。

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 に答える