2010-11-24 17 views
1

私は次のコードを持っている:Hibernateマッピング協会OneToMany

@Entity 
class A{ 
    @Id 
    private Long id; 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "a", cascade = CascadeType.ALL) 
    private List<B> bs =new ArrayList<B>(); 
... 
} 

@Entity 
class B{ 
    ... 

    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL) 
    @JoinColumn(name = "aId", nullable = false) 
    private A a; 
} 

私がもしbs.isEmpty()Aを永続化するために、NOT冬眠したいが。

このコードでは、内部にBオブジェクトがなくても、hibernateはAを保持します。

これにはどのような解決策がありますか?事前に

おかげで

答えて

0

私は、アノテーションを使用して制約を追加することができるとは思いません。

私はあなたが尋ねることは、完了したすべての挿入を受け取るのイベントリスナーを実装することができると思います。 Hibernate manual, chapter 12.2 - The Event Systemjavadoc for PreInsertEventListenerを参照してください。具体的には、私はこの方法があなたに有用であり得ると信じている:

boolean  onPreInsert(PreInsertEvent event) 
      Return true if the operation should be vetoed 

渡されたイベントから、あなたはPreInsertEventの方法getEntity()を通して挿入されるオブジェクトのインスタンスを取得します。
onPreInsertメソッドでtrueを返し、挿入を停止します。

リスナーをhibernate.cfg.xmlファイルにインストールすることを忘れないでください。