我在JPA中使用以下内容:
@Entity
class ParentClass {
@Id
@GeneratedValue
private long id;
...
@OneToOne(cascade = { cascade = { CascadeType.ALL },
mappedBy = "parentClass")
ChildClass child;
..
}
@Entity
class ChildClass {
@OneToOne
ParentClass parentClass;
}
如果我执行像createQuery这样的查询(“DELETE FROM ParentClass pc”),我的子类不会自动删除。
可以用JPA-2.0完成吗? (我确实与@OneToMany合作关系)。
答案 0 :(得分:4)
批量DML查询(例如DELETE FROM ParentClass pc
)会忽略级联选项和orphanRemoval
,因此如果您确实需要在批量查询中执行此操作,则无法将JPA配置为删除ChildClass
es自动。
但是,您可以通过在数据库模式中的REFERENCES ... ON DELETE CASCADE
的foregin键中添加ChildClass
约束来配置数据库。
答案 1 :(得分:3)
在JPA2中,您可以在@OneToOne注释上设置orphanRemoval = true
。但是我会说CascadeType.ALL应该处理它。如果您调用em.remove(parentClass)而不是调用查询,该怎么办?