gpt4 book ai didi

JPA 坚持一对多关系的父子关系

转载 作者:行者123 更新时间:2023-12-03 13:28:39 25 4
gpt4 key购买 nike

我想保留带有 20 个子实体的父实体,
我的代码在下面

家长类

@OneToMany(mappedBy = "parentId")
private Collection<Child> childCollection;

child 类
@JoinColumn(name = "parent_id", referencedColumnName = "parent_id")
@ManyToOne(optional=false)
private Parent parent;
String jsonString = "json string containing parent properties and child  collection" 

ObjectMapper mapper = new ObjectMapper();
Parent parent = mapper.readValue(jsonString, Parent.class);

public void save(Parent parent) {
Collection<Child> childCollection = new ArrayList<>() ;

for(Child tha : parent.getChildCollection()) {
tha.setParent(parent);
childCollection.add(tha);
}

parent.setChildCollection(childCollection);
getEntityManager().persist(parent);
}

因此,如果有 20 个子表,那么我必须在每个子表中设置父引用,因为我必须编写 20 个 for 循环?
可行吗?有没有其他方法或配置可以让我自动保留父子节点?

最佳答案

修复您的父类:

@OneToMany(mappedBy = "parent")

映射者 属性应指向关系另一侧的字段。如 JavaDoc说:

The field that owns the relationship. Required unless the relationship is unidirectional.



此外,您应该明确地在循环中持久化 Child 实体:
for(Child tha : parent.getChildCollection()) { 
...
getEntityManager().persist(tha);
...
}

Alan Hay在评论中注意到,您可以使用级联设施并让 EntityManager 自动保留所有子实体:
@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)

您可以在 Vlad Mihalcea's blog 中找到有关级联(和 JPA 本身)的更多详细信息.

关于JPA 坚持一对多关系的父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35197947/

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