如何在hibernate中的多对一映射上定义反级联删除

我有两个类A和B.许多B可以与单个A关联,因此从B到A的多对一关系。我已经映射了这样的关系:

       

A没有映射到B.记住这一点,我们打算在删除关联的A时删除B. 如果我可以在B中的多对一关联中定义inverse =“true”,那么这可能是可能的,但是hibernate不允许这样做。

有人能帮忙吗? 我们不想为此写任何东西。

Hibernate只沿着定义的关联级联。 如果A对Bs一无所知,那么你对A做的任何事情都不会影响Bs。

因此,Pascal的建议是做你想做的最简单的方法:

  ...       ...   

请注意,在原始代码中设置cascade="delete"就像你在原始代码中那样设置它不会做你想要的 – 它告诉Hibernate“如果B被删除则删除A”这很可能导致约束违规(如果有的话)其他B与A)相关联。

如果你绝对不能将A的集合添加到A(虽然我真的不能想到那种情况会是这种情况),你唯一的另一种选择是在外键级别定义从A到B的级联删除; 删除A后,您的B将被删除。

但是,这是一个相当丑陋的解决方案,因为您必须非常小心如何在Hibernate中删除A:

  1. 在删除A之前必须刷新会话(对B进行挂起更新可能会导致错误或A和某些B在后台重新插入)
  2. 所有与您的A相关联的B(并且因为您没有维护A侧的关系,这意味着所有 B)必须从所有活动会话和二级缓存中逐出。

我认为你需要从A到B的cascade="all,delete-orphan"one-to-many关联。