[英]Unable to add child entity - JPA OneToMany relationship
我一直在尝试向数据库中添加一个实体,该实体与另一个实体具有 OneToMany 关系,但是当我插入该实体时,它说无法插入 id,因为它是 null。
我已经像这样映射父子 class :
@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)
这是我的 rest Controller:
@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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.