java - 无法添加子实体 - JPA OneToMany 关系
问题描述
我一直在尝试向数据库添加一个实体,该实体与另一个实体具有 OneToMany 关系,但是当我插入该实体时,它说无法插入 id,因为它为空。
我已经像这样映射父子类:
@OneToMany(mappedBy = "directory", cascade = CascadeType.ALL)
private List<DirectoryRemarksEntity> remarks;
子实体:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DIRECTORY_ID")
@JsonIgnore
private DirectoryTableEntity directory;
我的 json 看起来像这样:
{
"state": {
"id": 2,
"nameEn": "Dubai",
"code": "DXB",
"nameAr": "دبي"
},
"segment": {
"id": 5,
"name": "Government",
"alias": "Gov"
},
"contactType": {
"id": 5,
"name": "FAX"
},
"remarks": [
{
"remarkValueAR": "EN Remarks",
"remarkValueEN": "AR RemarksEN ",
"remarkType": {
"id": 4,
"name": "legacy_modifieddate"
}
}
],
"isTelSecret": 1,
"isPublishElectroniceMedia": 0,
"isTelPublishDa": 1,
"isPrintARA": 0,
"isPrintENG": 0,
"establishmentNameEn": "Establishment Name",
"establishmentNameAr": "",
"establishmentSubNameEn": "Subname",
"establishmentSubNameAr": "Arabicname",
"contactCountryCode": "92",
"contactNumber": "3042501110",
"streetAR": "",
"streetEN": "",
"houseNumber": "",
"flatNo": "",
"buildingAR": "",
"buildingEN": "",
"proffesionAR": "",
"proffesionEN": "",
"latitude": "",
"longitude": "",
"accountProductCode": "00",
"subSegment": "",
"companyNameAr": "",
"companyNameEn": "",
"email": "",
"url": "",
"ISUrl": "",
"ticketsFeesEN": "",
"ticketsFeesAR": "",
"timingsAR": "",
"timingsEN": "",
"streetEn": "SZR"
}
这是hibernate抛出的错误:
错误消息 = ORA-01400:无法将 NULL 插入 ("DQISAPPS"."DIRECTORY_REMARKS"."DIRECTORY_ID")
在 oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
这是我的休息控制器:
@PostMapping("/")
public ResponseEntity<Response<DirectoryTableEntity>> save(@RequestBody DirectoryTableEntity directory){
return new ResponseEntity<>(
new Response<>(directoryService.save(directory), new Meta(SUCCESS_MESSAGE, HttpStatus.OK.value())),
HttpStatus.OK);
}
这是我的服务:
@Override
public DirectoryTableEntity save(DirectoryTableEntity directory) {
// TODO Auto-generated method stub
String user = authService.getUsername();
directory.setStatusId(1);
directory.setCreatedBy(user);
directory.setLastModifiedBy(user);
return directoryTableRepository.save(directory);
}
谁能告诉我这里缺少什么?
解决方案
DirectoryRemarksEntity
和之间的关系DirectoryTableEntity
是双向的。在JPA/Hibernate
你必须明确设置双方。
当DirectoryTableEntity
从 json 创建时,directory.getRemarks()
将拥有DirectoryRemarksEntity
但remark.getDirectory()
将是null
.
所以更新你的服务方法以包括directory.getRemarks().forEach(remark -> remark.setDirectory(directory));
@Override
public DirectoryTableEntity save(DirectoryTableEntity directory) {
// TODO Auto-generated method stub
String user = authService.getUsername();
directory.setStatusId(1);
directory.setCreatedBy(user);
directory.setLastModifiedBy(user);
directory.getRemarks().forEach(remark -> remark.setDirectory(directory));
return directoryTableRepository.save(directory);
}
推荐阅读
- join - 谷歌表数组公式+加入+过滤
- ios - 为什么 .foregroundColor 属性不适用于 NSMutableAttributedString?
- ruby-on-rails - 如何验证rails中的时间戳?
- php - 比较关联数组中foreach循环内的下一个元素
- javascript - 在函数内调用文件的内容
- python - 如何在同一轴上自动将多个颜色条彼此相邻放置
- javascript - 如何从此嵌套对象数组中获取最大的 category_id?
- material-ui - 如果它被全局设置覆盖,如何强制执行 MUI 样式?
- c - gtk/gtk.h:没有这样的文件或目录 Windows
- c++ - 从“name”、number 到模板处理函数的高效调度