JPA:反向级联删除

时间:2009-07-23 22:52:39

标签: java jpa

@Entity
public class Parent {
    @Id
    @GeneratedValue(strategy=GenerationType.TABLE)
    int id;

    @OneToMany(cascade=CascadeType.REMOVE)
    List<Item> children = new ArrayList<Child>();
}

@Entity
public class Child {
    @Id
    @GeneratedValue(strategy=GenerationType.TABLE)
    int id;
}

正如您在上面所看到的,我在父母和孩子之间有一个OneToMany-Relation。如果删除父实例,则也会删除所有子项。有没有办法让这种方式反过来呢?

Parent p = new Parent();
Child c = new Child();
p.children.add(c);

EntityManager.persist(p);
EntityManager.persist(c);

EntityManager.remove (c);

此代码毫无例外地运行,但是当我下次加载p时,会附加一个新子代。

1 个答案:

答案 0 :(得分:2)

如果您希望从双方都进行删除操作,则需要在ParentChild之间定义双向关系:

// in Parent
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="parent")
List<Item> children = new ArrayList<Child>();

// in Child
@ManyToOne
Parent parent;