在第二次调用时,Spring级别的JPA主键违规

时间:2016-10-26 08:18:33

标签: java spring spring-data-jpa

我有2个班级:

@Entity
class Foo {
  @Id
  private Long id;

  @Column
  private String value;

  @ManyToOne(cascade = CascadeType.ALL)
  private SubFoo subFoo;

  //getters and setters
}

@Entity
class SubFoo {
  @Id
  private String id;

  //getter setter
}

我的测试创建请求是

{
    "value": "bar",
    "subFoo" : {
        "id" : "sub1"
    }
}

我的目标如下:如果我第一次发布该主体,我希望两个实体都保持不变,因为Foo和SubFoo都不存在。为了使这项工作没有进一步的代码行,我添加了级联ALL选项。

当该主体现在第二次发布时,它应该只取“sub1”并将其绑定到第二个实体。但是Hibernate试图再次使用id“sub1”持久保存SubFoo,这会导致主键违规。

我的问题是,有没有办法声明实体,我可以通过hibernate自动识别何时保留或何时只是绑定而不进行手动检查两次发布我的JSON?

提前致谢

0 个答案:

没有答案