对OneToMany关系的Hibernate级联操作提供更新查询

对OneToMany关系的Hibernate级联操作提供更新查询,hibernate,jpa,hibernate-mapping,hibernate-onetomany,Hibernate,Jpa,Hibernate Mapping,Hibernate Onetomany,根据上面的代码,我有一个父到子的一对多关系。子项包含一个复合键作为其主键 我使用复合键填充子项,将其添加到父项,填充父项,并使用session.save()保存父项。此操作已成功在子级上执行insert语句。同样,如果我尝试插入另一个子对象,但包含与前面相同但不同的外键的复合键,然后尝试再次保存父对象,它实际上会使用新的Parentid更新子对象中的现有行 根据关系数据库,我的理解是子表中复合键的重复项应该无法插入。但是,Hibernate正在更新现有行,因为值相同(??)。我尝试为复合键插入不

根据上面的代码,我有一个父到子的一对多关系。子项包含一个复合键作为其主键

我使用复合键填充子项,将其添加到父项,填充父项,并使用session.save()保存父项。此操作已成功在子级上执行insert语句。同样,如果我尝试插入另一个子对象,但包含与前面相同但不同的外键的复合键,然后尝试再次保存父对象,它实际上会使用新的Parentid更新子对象中的现有行

根据关系数据库,我的理解是子表中复合键的重复项应该无法插入。但是,Hibernate正在更新现有行,因为值相同(??)。我尝试为复合键插入不同的值,它在子表中插入得很好

我希望我正在努力使你正确地理解这个问题。两个表之间存在单向的一对多关系,其中更新的行具有相同的值


我不知道这是一对多还是复合键的问题。

您能提供一些代码来说明您在做什么吗?很难理解这个描述。我不明白复合PK与两个实体之间的关联有什么关系。但是您的映射是错误的:
table2.myid
被映射了两次:一次作为Entity1中的JoinColumn,一次作为Entity2中的列。从Entity2中删除该字段,或使关联双向。
@Entity
@Table(name="table1")
public class Parent{

    @Id
    @Column(name="Parentid")
    private String Parentid;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn(name="Parentid" referencedColumnName="Parentid")
    private List<Child> objChild;
    .....//getters and setters
}
@Embeddable
public class ChildPk{

    @Column(name="...")
    private String str1;

    @Column(name="...")
    private String str2;
    .....//getters and setters
}

@Entity
@Table(name="table2")
public class Child{

    @Column(name="Parentid", nullable="false")
    private String Parentid;  //this the foriegn key referencing Entity1

    @EmbeddedId
    private ChildPk objChildPk;

    .....//getters and setters
}