我有两个与多对多关系相关联的实体:电影和演员
电影
public class Movie {
@Id
private String imdbId;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER, targetEntity = Actor.class)
private Set<Actor> actor;
}
演员
public class Actor {
@Id
private String actorId;
}
这是一个宁静的api,我将json发布到MovieController。我的json是:
{
"imdbId": "tt2395424",
"actor" : [{"actorId" : "0001"}, {"actorId" : "0002"}]
}
这完全正常,并且演员自动填充。但是,当我插入一个具有相同actorId的新电影时,它会抛出演员已存在的错误。我很困惑,因为据我所知Hibernate比较插入前的id如果不存在它将插入其他只是映射它。你能告诉我哪里出错了吗?
答案 0 :(得分:1)
问题在于Movie类中设置的CascadeType.ALL
以上actor。 CascadeType.ALL
所做的是对嵌入式实体执行与父实体相同的操作。保存操作将尝试将actor保存在Actor表中,如果actor ID已存在于DB中,则save将抛出错误。尝试在电影实体上使用saveOrUpdate
代替save
操作。