1. ホーム
  2. java

[解決済み] JPA CascadeType.ALLで孤児が削除されない

2022-05-17 06:45:34

質問

以下のマッピングでJPAを使用して、孤児ノードを削除するのに苦労しています。

@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;

孤児となったロールがデータベースをうろつくという問題を抱えています。

私は、アノテーション org.hibernate.annotations.Cascade Hibernate固有のタグを使用できますが、明らかに私のソリューションをHibernateの実装に結び付けたくはないのです。

EDIT : JPA2.0ではサポートされるようです。

どのように解決するのですか?

Hibernateで使用する場合、明示的にアノテーションを定義する必要があります。 CascadeType.DELETE_ORPHAN と併用することで、JPAの CascadeType.ALL .

Hibernateを使用する予定がない場合、孤児となるレコードを避けるために、まず子要素を明示的に削除し、次にメインレコードを削除する必要があります。

実行シーケンス

  1. 削除するメイン行を取得
  2. 子要素を取得する
  3. すべての子要素を削除
  4. メイン行を削除
  5. セッションを閉じる

JPA 2.0では、オプションの orphanRemoval = true

@OneToMany(mappedBy="foo", orphanRemoval=true)