Невозможно добавить дочерний объект - отношение JPA OneToMany - PullRequest
1 голос
/ 12 июля 2020

Я пытался добавить объект в базу данных, который имеет отношение OneToMany к другому объекту, но когда я вставляю этот объект, он говорит, что невозможно вставить идентификатор, потому что он равен нулю.

Я сопоставил родительский дочерний элемент класс следующим образом:

@OneToMany(mappedBy = "directory", cascade = CascadeType.ALL)

private List<DirectoryRemarksEntity> remarks;

Дочерний объект:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DIRECTORY_ID")
@JsonIgnore
private DirectoryTableEntity directory;

My 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"
}

Это ошибка, которую выдает спящий режим:

Ошибка Msg = ORA-01400: невозможно вставить NULL в («DQISAPPS». «DIRECTORY_REMARKS». «DIRECTORY_ID»)

в oracle. jdb c .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);
}

Кто-нибудь может сказать, что мне здесь не хватает?

1 Ответ

2 голосов
/ 12 июля 2020

Связь между 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...