私はhibernateとj2eeを使って実際にダミーの辞書バックエンドを作成しようとしています。 (これらの技術を学ぶために)Hibernate many to many proper delete
私は2つのエンティティ 'Word'と 'Category'を持っており、これらの間には多くの関係があります。私が到達したいのは、カテゴリを削除すると、影響を受ける単語のカテゴリすべてから削除されていますが、単語がまだ存在していて、単語を削除すると、カテゴリの観点からは何も起こりません。そのカテゴリにはそれ以上の単語がなくてもカテゴリが存在するはずです。
現在カテゴリを削除することはできません。そのカテゴリには少なくとも1つの単語があります。 (Recive:org.hibernate.exception.ConstraintViolationException:文を実行できませんでした) 単語を削除すると、そのカテゴリに単語がなくなると、カテゴリも単語とともに削除されます。
@Entity
@Table(name = "Word")
public class Word {
@Id()
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String uid;
@NotNull
@Column(nullable = false, length = 512)
private String hungarian;
@NotNull
@Column(nullable = false, length = 512)
private String english;
@JoinColumn(name = "categories_uid")
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
@Valid
private Set<Category> categories;
...
}
@Entity
@Table(name = "Category")
public class Category {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String uid;
@NotNull
@Size(min = 3, max = 512)
@Column(nullable = false, length = 512)
private String name;
...
}
パフォーマンス上の問題を引き起こす可能性があり、そのセット内の単語の多くが存在することになるので、私はCategoryクラスにセットを作成しませんでした。ここで
は、私は実体を宣言した方法です。 可能であれば、私はCategoryクラスでSetを作成しません。
私はCascadeType.ALLがこれを処理すべきだと考えました。
ありがとうございます。
これらのエンティティ間の関係がオプションの場合は、結合テーブルが必要と思うのですが(カテゴリのない単語、 ...)ここにその状況を実現する方法の例があります。https://howtoprogramwithjava.com/hibernate-manytomany-unidirectional-bidirectional/ – RubioRic
また、@JoinTableアノテーションを意味します。 – RubioRic