Hibernate映射关联OneToMany具有约束限制

时间:2010-11-24 17:10:04

标签: hibernate mapping one-to-many

我有以下代码:

@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也会持续存在。

你知道任何解决办法吗?

提前致谢

1 个答案:

答案 0 :(得分: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文件中安装监听器。