我有 2 个具有多对多关系的实体。电影实体是这个关系的所有者,所以当我想删除一个演员实体时,我使用一个注解 @PreRemove 的方法来删除电影演员中出现的任何演员 ID,以避免“外键违规异常”。
电影课
@Entity
public class Movie extends AbstractBusinessObject{
@ManyToMany
private Map<String, Actor> cast;
// setters and getters
public void removeCastMember(Actor actor){
for (Entry<String, Actor> e : cast.entrySet()) {
if(e.getValue().id.equals(actor.id)){
cast.remove(e.getKey());
}
}
} // removeCastMember()
}
演员等级
@Entity
public class Actor extends AbstractBusinessObject{
@ManyToMany(mappedBy = "cast")
private Set<Movie> movies;
// setters and getters
@PreRemove
private void removeActorFromMovies() {
for (Movie m : movies) {
m.removeCastMember(this);
}
}
}
需要明确的是,根据我的测试,它可以工作 - 电影对象在数据库中正确更新。但是,我无法理解当没有调用 saveOrUpdate() 或持久/合并这些对象时怎么可能。