Json 多对多实体在插入相同ID时出错
我有两个实体与多对多的关系联系在一起:电影和演员 电影 这是一个restful api,我正在向MovieController发布json。我的json是:Json 多对多实体在插入相同ID时出错,json,spring,hibernate,jpa,Json,Spring,Hibernate,Jpa,我有两个实体与多对多的关系联系在一起:电影和演员 电影 这是一个restful api,我正在向MovieController发布json。我的json是: { "imdbId": "tt2395424", "actor" : [{"actorId" : "0001"}, {"actorId" : "0002"}] } 这是完美的工作,演员是自动填充。但当我插入一部有相同actorId的新电影时,它会抛出一个错误,即演员已经出现了。我很困惑,因为据我所知,Hibernate会在插入之前
{
"imdbId": "tt2395424",
"actor" : [{"actorId" : "0001"}, {"actorId" : "0002"}]
}
这是完美的工作,演员是自动填充。但当我插入一部有相同actorId的新电影时,它会抛出一个错误,即演员已经出现了。我很困惑,因为据我所知,Hibernate会在插入之前比较id,如果不存在,它会插入,否则就映射它。你能告诉我哪里出了问题吗?问题在于
级联类型。所有以上演员都是在电影课上设置的。CascadeType.所做的一切就是对嵌入式实体执行与父实体相同的操作。save操作将尝试在actor表中保存actor,如果actor id已经存在于DB中,则save将抛出错误。尝试对电影实体使用saveOrUpdate
而不是save
操作 但是我正在使用persist…当使用persist保存时,saveOrUpdate的另一个替代方法是什么?您可以使用merge而不是persist,这是saveOrUpdate的替代方法。找到更多关于Thank的详细信息。这是可行的,但是关于自动生成ID的任何想法,因为我担心,对于那些我在插入之前做了一些检查的人,我认为这是唯一的解决方案,因为hibernate不检查自动生成的ID。
public class Actor {
@Id
private String actorId;
}
{
"imdbId": "tt2395424",
"actor" : [{"actorId" : "0001"}, {"actorId" : "0002"}]
}