繁体   English   中英

创建OnetoMany,ManyToOne映射时的休眠问题给null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM