Я вызываю saveOrUpdate для родительской сущности (приложения), где у родителя есть двунаправленное сопоставление с дочерним элементом (auditapplication).
При вызове saveOrUpdate для parent он заходит в бесконечный цикл с ошибкой Stack over floe null.
Я хочу сохранить нетронутым двунаправленное отношение.
Может кто-нибудь, пожалуйста, помогите мне узнать, что я делаю неправильно. Любой Лидс очень поможет в этот час.
Я предоставил весь код ниже:
Я попытался с помощью JsonIgnore аннотации на дочерней стороне отношения, но не повезло.
дочерняя сущность: auditapplication:
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MOTS_ID",referencedColumnName = "MOTS_ID",
nullable = false, insertable = false, updatable = false)
private Application application;
родительский объект: приложение:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "application", cascade = CascadeType.ALL)
Set<AuditApplication> auditApplication;
постоянный код:
Application app = applicationDao.getAppDetailsByMotsId(appOnboardingRequestDTO.getSelectedMotsId());
if(null != app){
app.setDirector(appOnboardingRequestDTO.getDirector());
app.setAvpTower(appOnboardingRequestDTO.getAvpTower());
app.setOnboarded(true);
if(null != app.getAuditApplication() && !app.getAuditApplication().isEmpty()){
//Check if module Id already exists
List<AuditApplication> existingAuditApps = AuditApplicationPredicate.filterAuditAppliations(app.getAuditApplication(),AuditApplicationPredicate.alreadyExists(appOnboardingRequestDTO.getModuleId()));
if(null == existingAuditApps || existingAuditApps.isEmpty()){
AuditApplication auditApp = new AuditApplication();
auditApp.setApplication(app);
auditApp.setModuleId(appOnboardingRequestDTO.getModuleId());
app.getAuditApplication().add(auditApp);
applicationDao.saveOrUpdate(app);
}else{
//Return error message that module already exists
return "Module Id already exists.";
}
}else{
Set<AuditApplication> auditApplicationSet = new HashSet<AuditApplication>();
AuditApplication auditApp = new AuditApplication();
auditApp.setApplication(app);
auditApp.setModuleId(appOnboardingRequestDTO.getModuleId());
auditApplicationSet.add(auditApp);
app.setAuditApplication(auditApplicationSet);
applicationDao.saveOrUpdate(app);
}
}
return "success";
}