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