删除一对多单向hibernate映射

时间:2012-06-20 13:17:21

标签: hibernate jpa

在单向hibernate映射中删除父项的最佳做法是什么? (我正在使用JPA)

Parent: 
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private List<Child> children= new ArrayList<Child>();

Child:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fk_parent")
private Parent parent;

Child是这里关系的所有者,我想删除有子关联的父级。我该如何实现?我应该继续从父母一个一个地迭代孩子并删除它们或者存在其他方式。不幸的是,在hibernate docs中没有找到任何关于删除的内容。

2 个答案:

答案 0 :(得分:0)

事实上,你的关联是双向的,而不是单向的......

如果您的目标是在删除父项时删除子项,那么您只需要

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<Child> children= new ArrayList<Child>();

em.remove(parent);

答案 1 :(得分:0)

天啊!发现了问题。这与级联无关,但是需要很好的级联。问题在于我将子项添加到父项并删除它们的方式。总结一下:

如果我在父级上执行保存以创建关联:

parent.addChild(child)  
em.save(parent)

然后我必须在删除时从父进行操作。或者,如果我将子项添加为

child.setParent(parent)
em.save(child)

然后我必须对孩子进行操作以删除它等。