我有2个具有多对多关系的实体。 Movie Entity是此关系的所有者,因此,当我想要删除Actor实体时,我使用注释@PreRemove的方法删除Movie Movie中的任何Actor ID以避免出现“外键违例异常”。JPA - @PreRemove方法行为
电影类
@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()或持久化/合并这些对象的时候它怎么可能。
谢谢你这么详细的回答。我真的忘记了重要的部分:'合并是用来分离实体'。 –