使用JPA的级联更新问题

假设A对象与B对象是一对多的关系,B的集合作为A的属性children而存在。

class A{
……
@OneToMany(mappedBy=”parent”, cascade={CascadeType.ALL})
private Set<B> children;
……
}

使用CascadeType.ALL能够实现级联保存、级联删除。但是级联更新的时候遇到如下问题:

A.children.remove(child1);
A.children.add(child2);

这时候child2确实被添加到数据库了,但child1却并没有被删除。

其实只要加上orphanRemoval=true 就可以了

class A{
……
@OneToMany(mappedBy=”parent”, cascade={CascadeType.ALL},orphanRemoval=true)
private Set<B> children;
……
}

作者: Ben

IT、电商、零售、医药行业混迹多年的理想主义者。