gpt4 book ai didi

Hibernate 一对多级联持久化具有复合键的子项

转载 作者:行者123 更新时间:2023-12-05 05:14:35 25 4
gpt4 key购买 nike

我正在尝试实现将父对象与其子对象持久化。子对象有一个复合键,其中包含父对象的外键。

当前映射是单向的一对多,父级拥有关系。

这是我的模型:

家长:

@Entity
@Table(name = "PARENT")
public class ParentEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column
private String name;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "PARENT_ID")
private Set<Child> children;

...

child :

@Entity
@IdClass(ChildPK.class)
@Table(name = "CHILD")
public class Child {

@Id
@Column(name = "PARENT_ID")
private Long parentId;

@Id
private String source;

@Id
private Long alternativeId;

...

对战:

class ChildPK implements Serializable {

private Long parentId;
private String source;
private Long alternativeId;

...

目前我的问题是 Hibernate 没有处理填充 Child 中的 parentId,我认为这只是我希望它会,但我在 child 上违反了约束。我正在寻找有关如何构建包含其子对象的父对象并一次性保存所有对象的想法。

谢谢你的帮助,

最佳答案

我问过一个非常相似的问题 here 。查看问题和答案(有效)。

本质上,你可以试试这个:

@Entity
@Table(name = "PARENT")
public class ParentEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column
private String name;

@OneToMany(mappedBy="parent", cascade = CascadeType.ALL)
private Set<Child> children = new HashSet<>();

public void addChild(Child child){
child.setParentId(this.id);
children.add(child);
}
...

@Entity
@IdClass(ChildPK.class)
@Table(name = "CHILD")
public class Child {

@Id
@Column(name = "PARENT_ID")
private Long parentId;

@Id
private String source;

@Id
private Long alternativeId;

...

具有相同的 ChildPk。请注意,在父级方面,我们使用 mappedBy 后跟 Java 属性的名称而不是 @JoinColumn,因为父级不能是关联的所有者(另请参见 this question ) .此外,使用 addChild 方法正确设置关系两侧的属性也很有用。

成功!

关于Hibernate 一对多级联持久化具有复合键的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52310780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com