我有一组实体,例如:
public class EntityToDrop {
@NaturalId
@ManyToOne(fetch = FetchType.EAGER)
private ParentEntity parentEntity;
@OneToMany(mappedBy = "entityToDrop", cascade = {CascadeType.REMOVE, CascadeType.REFRESH}, orphanRemoval = true)
private Set<OtherEntity> otherEntities= new HashSet<>();
[...] (other fields and relationships)
}
public class ParentEntity {
@OneToMany(mappedBy = "parentEntity", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<EntityToDrop> childEntities = new HashSet<>();
[...]
}
public class OtherEntity{
@ManyToOne(optional = true,fetch = FetchType.EAGER)
@NaturalId
private EntityToDrop entityToDrop;
[...]
}
在我正在调用的代码的一部分中
parentEntityInstance.getChildEntities().remove(entityToDrop);
[...]
entityManager.persist(parentEntityInstance);
我希望应该总是从数据库中删除entityToDrop
,因为它已标记为orphanRemoval
。但是,当与OtherEntity
的关系存在时,它并不会被删除,更有趣的是,如果我删除与OtherEntity
的关系,然后尝试在同一事务中将其从ParentEntity
中删除,那就是也不会掉线。
在任何情况下,orphanRemoval = true
都无法正常工作吗?作为后续工作,我如何确定在这种情况下阻止我的实体被移除的原因?