2010-11-24 79 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文件中安装侦听器。