2010-11-24 81 views
1

我有以下代碼:Hibernate映射一對多關聯與約束限制

@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()。

有了這段代碼,hibernate仍然存在,即使它裏面沒有B對象。

你知道這個解決方案嗎?

在此先感謝

回答

0

我不認爲你可以使用註釋添加約束。

我認爲你所要求的可以完成一個Event Listener,它接收所有正在完成的插入。請參閱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文件中安裝偵聽器。