[英]Hibernate issue on creation OnetoMany,ManyToOne Mapping Giving null
我有一个这样的模型:
@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,
[...]
}]
}
休眠没有父对象的ID,因此Relationship.parentObject.id为null。 数据库抛出错误,提示:
无法将NULL插入(“ 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,导致在PARENT_OBJECT_ID
列中插入NULL
(由于cascade = CascadeType.ALL
,此时关系也得以持久)。
若要解决此问题,请移动parentObject = parentObjectRepository.save(parentObject);
在循环之后,或在dtoConverter.convert()
中dtoConverter.convert()
PO及其关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.