どの種類のカスケードタイプを使用できますか。また、参照する「もの」がなくなったときにHibernateがイメージを自動的に削除するようにするにはどうすればよいですか?(基本的にHibernateでのガベージコレクションの一種です)
データベース:Thingテーブル-画像テーブルは多対1なので、多くのモノが同じ画像を参照できます。
エンティティ:モノ、イメージ
それは多対一なので、たとえば5つのものが1つの画像に関連しています。
今、私はします:
public void delete(Thing thing)
{
if (countReferences(thing.getImage()) > 1)
{
thing.setImage(null);
}
getSession().delete(thing);
}
countReferencesを実行せず、関係にCascaseType.REMOVEがある場合、HibernateはImageも削除しようとします。データベース内の制約は、画像がまだどこかで参照されているときに発生し、例外が発生します。
それで、要するに、それを参照している最後のものが削除されたときにhibernateにImageを削除するように指示するにはどうすればよいですか?
は
org.hibernate.event.PreDeleteEventListener
おそらく解決策ですか?
Hibernateドキュメントを詳しく調べたところ、そのような機能はサポートされていないようです。サポートされていない理由は理解できたと思いますが。
ではone-to-many
、参照、コレクション内のエンティティをしていると考えられるが所有するコレクションを含むエンティティによって(参照24.1。コレクションに関するAの注意を)。
それとはmany-to-one
対照的に、参照にはそのような影響はありません。参照されるエンティティは、正当に、参照するエンティティによって所有されていません。したがって、すべての参照Image
が削除されたとしても、それImage
も削除する必要があると考える理由はありません。Image
完全に独立したファーストクラスのエンティティです。
したがって、あなたのケースでは、適用的に削除を強制することからの脱出はないようです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加