在JPA中自动删除相关的@OneToOne

时间:2011-02-10 14:39:22

标签: java hibernate jpa jpa-2.0

我在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合作关系)。

2 个答案:

答案 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)而不是调用查询,该怎么办?