具有多个错误的实体在插入相同ID

时间:2017-08-11 01:54:11

标签: json spring hibernate jpa

我有两个与多对多关系相关联的实体:电影和演员

电影

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如果不存在它将插入其他只是映射它。你能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

问题在于Movie类中设置的CascadeType.ALL以上actor。 CascadeType.ALL所做的是对嵌入式实体执行与父实体相同的操作。保存操作将尝试将actor保存在Actor表中,如果actor ID已存在于DB中,则save将抛出错误。尝试在电影实体上使用saveOrUpdate代替save操作。