我有以下两个实体:
public class Parent implements Serializable
@OneToMany(mappedBy="m_owner", targetEntity = Child.class, orphanRemoval=true)
List<Child> children;
和
public class Child implements Serializable
@ManyToOne(targetEntity = Parent.class)
当我删除Parent时,会按预期删除子项,但是当我删除子项时,将删除Parent。我尝试将cascade=CascadeType.DETACH
添加到孩子的注释中,但这没有帮助。如何删除子项对父母没有影响?
答案 0 :(得分:3)
我的问题是因为我使用NamedQuery
来删除孩子。
@NamedQuery(name="Child.deleteById", query="Delete from Child child where child.m_id=:id")
这似乎绕过了我设置的注释并删除了父实体。
为了解决这个问题,我将删除服务更改为只使用EntityManager.remove()
,此时所有注释都有效。