Получение HibernateException: незаконная попытка связать прокси с двумя открытыми Сессиями при попытке обновления - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь обновить элемент в моей таблице, используя Hibernate, но получаю следующую ошибку:

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500).незаконно пытался связать прокси с двумя открытыми сессиями;вложенное исключение - org.hibernate.HibernateException: незаконно попытка связать прокси с двумя открытыми сеансами

DAO:

    @Override
public Demande getDemandeById(int id) {
    // TODO Auto-generated method stub
    Session session;
     try {
         session = this.sessionFactory.getCurrentSession();
        } catch (HibernateException ex) {
            session = this.sessionFactory.openSession();
        }

    Demande d = (Demande) session.load(Demande.class, new Integer(id));
    return d;
}
@Override
public void updateDemande(Demande d) {
    // TODO Auto-generated method stub
    Session session;
     try {
         session = this.sessionFactory.getCurrentSession();
        } catch (HibernateException ex) {
            session = this.sessionFactory.openSession();
        }

    session.update(d);

    logger.info("Person updated successfully, Person Details="+d);
}

Контроллер:

@GetMapping("rh/editProfilDemande")
public String  RHEditProfilForm(Model m, @RequestParam int id_demande) {  
    this.profil_id = pf.getIdProfil();
    Demande d = demandeService.getDemandeById(id_demande);
    this.idDemande = id_demande; 

    m.addAttribute("profil", pf);

    m.addAttribute("demande", d); 
    return "RHEditProfil";


}   

@PostMapping("rh/editProfilDemande")
public String  RHEditProfil(Model m, Profil pf) {
    Demande d= demandeService.getDemandeById(this.idDemande);



    demandeService.updateDemande(d);
     m.addAttribute("demande",d);
    return "RHDemandeTraiteSuccess";


} 

1 Ответ

0 голосов
/ 23 января 2019

Вы открываете новые сеансы, но никогда не закрываете их, если выполняется эта часть кода:

session = this.sessionFactory.openSession();

Если вы действительно хотите сохранить эту логику:

  try {
     session = this.sessionFactory.getCurrentSession();
    } catch (HibernateException ex) {
        session = this.sessionFactory.openSession();
    }

вы должны убедиться, что добавили session.close() после завершения работы и после использования openSession() вместо getCurrentSession();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...