繁体   English   中英

无法添加子实体 - JPA OneToMany 关系

[英]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);
}

谁能告诉我这里缺少什么?

DirectoryRemarksEntityDirectoryTableEntity之间的关系是双向的。 JPA/Hibernate中,您必须明确设置双方。

DirectoryTableEntity从 json 创建时, directory.getRemarks()将具有DirectoryRemarksEntityremark.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.

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