给定一个具有字符串和日期值的实体B。
每个工作负载创建一个B实例,并由每个工作负载中创建的所有其他实体共享。
B bee = new B();
我们还有另一个实体类A,每个工作负载仅创建一次,并且具有:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
List<B> bees = new B();
然后,我们a.bees.add(bee);
为实体a添加一次,为其他实体类型c-z添加一次。
现在,由于这只蜜蜂是共享的,所以当我删除具有b的A型实体时会发生什么?
休眠状态是否会尝试删除B,尽管它可能会被A以外的其他实体引用?
仅当不再引用b时,才有办法删除ORPHANDELETE / CASCADE吗?
orphanRemoval
或CascadeType.REMOVE
用于删除子实体(当父实体不再引用子实体或删除父实体时)。在这两种情况下,您都在对检索到的父实体进行操作,因此hibernate将对子实体执行操作,因为它已经知道。
为了实现您的目标,休眠需要知道还有谁引用了该子实体。休眠无法自动进行。
但是,如果您的子实体引用了所有其他实体,则可以使其不再引用那些其他实体,因此仅将父实体保留为与之关联的实体。因此,现在将其从此父级中删除时,可以通过orphanRemoval
或删除它CascadeType.REMOVE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句