hibernate входит в бесконечный цикл при сохранении родительского дочернего объекта с двунаправленным отношением один-ко-многим - PullRequest
0 голосов
/ 29 апреля 2019

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