Hibernate 一对多注解 mappedBy 级联删除


环境:Hibernate 4.1.3.Final 、JPA
三个类:User、Album、Work;
关系是user对Album一对多,Album对work一对多;
目标是Album级联删除work,但删除work的时候、不能删除掉album;类推;

我写如下代码,用了@OneToMany、@ManyToOne、mappedBy
user对Album一对多:
在User类
@OneToMany(cascade=CascadeType.ALL ,fetch = FetchType.EAGER,mappedBy="user")
public Set<Album> getAlbums() {
return albums;
}
在Album类
@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.REFRESH)
public User getUser() {
return user;
}

Album对work一对多;
在Album:
@OneToMany(cascade=CascadeType.ALL ,fetch = FetchType.EAGER,mappedBy="album")
public Set<Work> getWorks() {
return works;
}
在Work:
@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.REFRESH)
public Album getAlbum() {
return album;
}

状况:删除work的时候,只删除work,不触发其它事件;但删除album的时候,它要求“从关系中移除将被删除的对象” 就是报:deleted object would be re-saved by cascade (remove deleted object from associations)

问: 1.同样的注解,为什么有不同的效果?(或者是为什么删除work的时候不报错?)
2.我使用“多方割断与一方的关系”的方法解决此问题,有更好的方法实现目标吗?(选答)

hibernate

大傻子11 11 years, 9 months ago

Your Answer