gpt4 book ai didi

java - 关于创建 OnetoMany、ManyToOne 映射的 Hibernate 问题给出 null

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:14 24 4
gpt4 key购买 nike

我有一个这样的模型:

@Entity
[...]
class ParentObject{
[...]
@OneToMany(cascade = CascadeType.ALL, mappedBy= "parentObject", orphanRemoval = true)
private List<Relationship> relationship;
}

在关系实体中:

@ManyToOne
@JoinColumn(name="PARENT_OBJECT_ID")
private ParentObject parentObject;

更新和保存时一切正常。仅当我尝试创建一个包含新关系的新 ParentObject 时:

parentObject: { 
id: null,
relationship: [
{id:null,
parentObjectId:null,
[...]
}]
}

hibernate没有ParentObject的id,因此Relationship.parentObject.id为null。数据库抛出错误:

cannot insert NULL into ("MYDB"."RELATIONSHIP"."PARENT_OBJECT_ID")

如有任何帮助,我们将不胜感激。

编辑:这是我的服务代码:

public ParentObjectDto save(ParentObjectDto parentObjectDto) {
ParentObject parentObject = dtoConverter.convert(parentObjectDto, ParentObject.class);

boolean isNewPO = parentObject.getId() == null ? true : false;

parentObject = parentObjectRepository.save(parentObject);

if (isNewPO) {
// This loop ensures that when a new PO is added, the child relationship
// objects are connected with the new parentObject that was just added.
for (Relationship relationship : parentObject.getRelationship()) {
relationship.setParentObject(parentObject);
}
}

return dtoConverter.convert(parentObject, ParentObjectDto.class);

}

名称当然不是我在这里写的,我只是将它们更改为更容易理解,如果我有任何拼写错误,那是我手动更改的:)

最佳答案

查看代码,问题可能是当 isNewPO 为 true 时,您首先保存 PO,然后将该父对象设置为关系。这意味着在持久化 PO 时,关系没有设置 PO,导致 NULL 被插入到 PARENT_OBJECT_ID 列中(此时关系也被持久化,因为 cascade = CascadeType.ALL)。

要解决此问题,请将 parentObject =parentObjectRepository.save(parentObject); 移至循环后,或在 dtoConverter.convert() 中连接 PO 及其关系。

关于java - 关于创建 OnetoMany、ManyToOne 映射的 Hibernate 问题给出 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27290978/

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