どのように私は、所有者エンティティからリンクすることなく、JPAでの依存関係を指定することができますか?
-
21-09-2019 - |
質問
の目標は、彼らの所有者が削除されたときに、すべての依存を削除することです。私は、次のクラスがあります:
@Entity
class Dependent {
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, optional = false)
@Column(name = "OWNER")
private Owner _owner;
}
@Entity
class Owner {
...
}
現在の実装では従属まだその所有者が削除された後に存在します。
所有者が依存へのリンクを持っていないと私は@Dependent注釈またはカスケード= DELETEを使用することはできませんので、変更することはできません。
んJPAは、このような「逆依存関係」をサポートしていますか? もう一つの問題は、フィールド_ownerが削除されている間に、オプション=「false」の保証を何ですか?
解決
あなたは2つのオプションがあります。あなたはどちらかOwner
を持つクラスcascade-delete
に袋/セット/リストを追加する必要があります。あなたが削除するまで、それがパフォーマンスに影響を与えないようにあなたは、このバッグは怠惰にし、それをアクセスすることはできません。
あなたの他のオプションは、所有者を削除すると、クエリでDependent
インスタンスを削除することです。 JPAは、インスタンスの自動ガベージコレクションを行いませんので、あなたはこれだけ、すべてが削除所有者に単一の関数を使用していますし、そこの子供たちを削除するための呼び出しを追加していることを確認します。
他のヒント
この問題を解決する方法はオーナーと同じテーブルを共有するサブクラスを使用し、依存にその時点のコレクションを追加しています。 私は「オプション= false」を上アーロンDigullaの点に同意していないよ、この文が唯一のassocationはオプションであることを示し、そしてあなたがbidrectional assocationを持っていなかったので、依存して常にマッピングを処理します。