Java Spring JPA主键冲突,第二次调用时级联所有

Java Spring JPA主键冲突,第二次调用时级联所有,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,我有两门课: @Entity class Foo { @Id private Long id; @Column private String value; @ManyToOne(cascade = CascadeType.ALL) private SubFoo subFoo; //getters and setters } 及 我的测试创建请求是 { "value": "bar", "subFoo" : { "id" : "su

我有两门课:

@Entity
class Foo {
  @Id
  private Long id;

  @Column
  private String value;

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

  //getters and setters
}

我的测试创建请求是

{
    "value": "bar",
    "subFoo" : {
        "id" : "sub1"
    }
}
我现在的目标是:如果我第一次发布这个主体,我希望这两个实体都被持久化,因为Foo和subfo都不存在。为了在没有更多代码行的情况下实现这一点,我添加了cascade-ALL选项

当该主体现在第二次发布时,它应该只获取“sub1”并将其绑定到第二个实体。但Hibernate会尝试第二次持久化id为“sub1”的子对象,这会导致主键冲突

我的问题是,是否有任何方法可以声明实体,我可以使用hibernate发布JSON两次,自动识别何时保存或何时绑定,而无需手动检查


提前感谢

查看此链接可能会有所帮助查看此链接可能会有所帮助
{
    "value": "bar",
    "subFoo" : {
        "id" : "sub1"
    }
}