@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时,会附加一个新子代。
答案 0 :(得分:2)
如果您希望从双方都进行删除操作,则需要在Parent
和Child
之间定义双向关系:
// in Parent
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="parent")
List<Item> children = new ArrayList<Child>();
// in Child
@ManyToOne
Parent parent;