2012-01-16 12 views
2

私はクラスAを持っている:Hibernate単方向@ManyToMany:制約違反なしで削除しますか?

@Entity 
public class A { 
    ... 
    @ManyToMany 
    private Set<Ref> refs = new HashSet<Ref>(); 
    ... 
} 

とクラスのRef:

@Entity 
public class Ref { 
// no link to A 
} 

私はAとA_Refではなく、文献を削除したいのですが、私はorg.hibernate.exception.ConstraintViolationException

を取得ありそれを行う簡単な方法か、明示的にA_Refクラスを作成する必要がありますか?

おかげ

編集:私はHQLで直接Aの私のリストを削除しようとした 。私はオブジェクトでそれをやった(関係を破った)と働いた(カスケード+孤児の削除)。

答えて

1

私はあなたが正しいと思っていますが、私が最初に推測したことは理解していますから、必要な注釈をすべて使用していることを確認してください。多対多の関係の中で

、あなたが確認するためにjoinTablesとcascadetypesを使用することができ、そのHibernateはそれのために自分のdomainObjectのを作成せずにそれ自体で必要なすべての関係を削除する場所を知っています。

それを管理する方法についての素晴らしいガイドがたくさんあります。最初のビューではmkyongからのガイドはかなり良いように見えます。注:変数宣言の代わりにゲッターに注釈を付けました! (これは単に味の問題です)。

+0

"Ref"テーブルは、多くの他のクラスからリンクされた参照データです。だから、私はbidirectionnal @ManyToManyを宣言することはできません(あなたのチュートリアルで言われているように)。 joinColumnは、デフォルト設定をオーバーライドする場合に使用しますが、そこに関連する属性は表示されませんでした。 –

+0

オブジェクトAの中から一方向にしか使用しない限り、必要であればわかりません。参照を自動的に削除するには、CascadeType属性が重要です。答えにカスケード型のリファレンスを追加しました。 – crusam

関連する問題