Java 一个OneToMany关系的合并,在jointable中执行INSERT语句,导致ConstraintViolationException

Java 一个OneToMany关系的合并,在jointable中执行INSERT语句,导致ConstraintViolationException,java,hibernate,jpa,spring-data-jpa,one-to-many,Java,Hibernate,Jpa,Spring Data Jpa,One To Many,我在JPA存储库中使用Spring数据。我有以下实体: 母公司: @Entity public class Parent { @Id String id; @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}) Set<Child> children; } 首先,我第一次用以下结构保存一个父级,一切都是正确的: { "id" :

我在JPA存储库中使用Spring数据。我有以下实体: 母公司:

@Entity
public class Parent {

    @Id
    String id;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    Set<Child> children;
}
首先,我第一次用以下结构保存一个父级,一切都是正确的:

{
    "id" : "1",
    "children" : [{
           id: "500", 
           value: "abc"
        }]
}
现在,我在我的父表
id:1
、子表
id:500、值:abc
中有一个条目,并且在jointable(父/子)中有一个关系
1-500
。 如果我没有,请尝试再次保存id为1的父级,并在子级中保存一个已更改的值:

{
    "id" : "1",
    "children" : [{
           id: "500", 
           value: "def"
        }]
}
我可以看到jpa正在执行一个updatestation,其中id=500
updatechildren SET value='def',这很好。但是,它还会尝试为jointable执行insert语句:
插入到父项\u子项(父项,子项)值(1500)
这会导致ConstraintViolationException,因为该项已存在于jointable中。
如何防止JPA执行此insert语句?

您使用哪种方法在数据库中插入?您使用的是持久化方法还是sevaOrUpdate方法?
您能在保存数据的地方显示一些代码吗?张贴控制器。您应该为第二个更新请求发出PUT请求。仅对新记录使用POST。不管怎样,发布你的控制器代码。你也没有向我们展示实体的全部代码。
Child
中是否有自定义的
equals/hashCode
实现?
{
    "id" : "1",
    "children" : [{
           id: "500", 
           value: "abc"
        }]
}
{
    "id" : "1",
    "children" : [{
           id: "500", 
           value: "def"
        }]
}