我有以下代码:
@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对象,hibernate也会持续存在。
你知道任何解决办法吗?
提前致谢
答案 0 :(得分:0)
我认为您不能使用注释添加约束。
我认为您所要求的可以实现事件监听器,它接收正在完成的所有插入。请参阅Hibernate manual, chapter 12.2 - The Event System和javadoc for PreInsertEventListener。具体来说,我相信这种方法可能对您有用:
boolean onPreInsert(PreInsertEvent event)
Return true if the operation should be vetoed
从传递的事件中,您将获得将通过PreInsertEvent的方法getEntity()
插入的对象的实例。
在onPreInsert方法中返回true,您将停止插入。
请记住在hibernate.cfg.xml
文件中安装监听器。