совершить транзакцию в спящем режиме - PullRequest
0 голосов
/ 30 июня 2011

я получаю эту ошибку, когда использую tx.commit более одного раза

Тип отчета исключение

 message

 description The server encountered an internal error () that prevented it from fulfilling this request.

  exception

 org.apache.jasper.JasperException: An exception occurred processing JSP page /JSP/Upload    /upload.jsp at line 444

 441: Query qLVa = hibernateSessiona1.createQuery("from Livrea where NomLivre = :userLV ");
 442: qLVa.setParameter("userLV", newName);
 443: 
 444: Livrea LVa =(Livrea) qLVa.uniqueResult(); 
 445: 
 446: Ajouter add = new Ajouter();
 447: 


  Stacktrace:
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:550)
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


  cause mère 

            javax.servlet.ServletException: net.sf.hibernate.NonUniqueResultException: query did not    return a unique result: 2
          org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:901) 
       org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:830)
       org.apache.jsp.JSP.Upload.upload_jsp._jspService(upload_jsp.java:612)
      org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


        cause mère 

      net.sf.hibernate.NonUniqueResultException: query did not return a unique result: 2
     net.sf.hibernate.impl.AbstractQueryImpl.uniqueElement(AbstractQueryImpl.java:559)
      net.sf.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:550)
     org.apache.jsp.JSP.Upload.upload_jsp._jspService(upload_jsp.java:515)
     org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


             note La trace complète de la cause mère de cette erreur est disponible dans  les fichiers   journaux de Apache Tomcat/7

это мой код:

   Session hibernateSession = HibernateUtil.currentSession();
   Transaction tx = hibernateSession.beginTransaction();
   Livrea LV = new Livrea();

   LV.setNomLivre(newName);
   hibernateSession.save(LV);
   tx.commit(); 
   HibernateUtil.closeSession(); 

   if(session.getAttribute("type").equals("Enseignant")){

   Session hibernateSessione1 = HibernateUtil.currentSession();
   Transaction txe1 = hibernateSession.beginTransaction();

   Query qEnseignant = hibernateSessione1.createQuery("from Enseignant where UserName =    :userSID ");
   qEnseignant.setParameter("userSID", session.getAttribute("UserName"));

   Enseignant en =(Enseignant) qEnseignant.uniqueResult();


   Query qLVe = hibernateSessione1.createQuery("from Livre wherea NomLivre = :userSID ");
   qLVe.setParameter("userSID", newName);

   Livrea LVe =(Livrea) qLVe.uniqueResult();


   LVe.addToAjouterenseiSet(en);
   int nbre =en.getNbrLivreAjou();
   nbre = nbre+1;
   en.setNbrLivreAjou(nbre);
   hibernateSessione1.update(en);

   txe1.commit(); 
   HibernateUtil.closeSession(); 
   }else
   if(session.getAttribute("type").equals("Administrateur")){

   Session hibernateSessiona1 = HibernateUtil.currentSession();
   Transaction txa1 = hibernateSessiona1.beginTransaction();

   Query qAdmin = hibernateSessiona1.createQuery("from Administrateur where UserName =    :userAdmin ");
   qAdmin.setParameter("userAdmin", session.getAttribute("UserName"));



  Administrateur admin =(Administrateur) qAdmin.uniqueResult();

  Query qLVa = hibernateSessiona1.createQuery("from Livrea where NomLivre = :userLV ");
  qLVa.setParameter("userLV", newName);

  Livrea LVa =(Livrea) qLVa.uniqueResult(); 

  Ajouter add = new Ajouter();

  LVa.addToAjouterSet(admin.getIdAdmin());

  if(admin.getNbrLivreAjou()== null)admin.setNbrLivreAjou(1);
  else{ int nbra =admin.getNbrLivreAjou();
  nbra = nbra+1;
  admin.setNbrLivreAjou(nbra);
  }

  hibernateSessiona1.update(admin);
  txa1.commit(); 
  HibernateUtil.closeSession();  
  }

PLZ, помогите мне

1 Ответ

2 голосов
/ 30 июня 2011

Ваш код вызывает

Livrea LVe = (Livrea) qLVe.uniqueResult ();

, поэтому выполняемый запрос должен возвращать один единственный результат.Однако выполнение этого запроса фактически вернуло 2 записи результата, которые вызвали исключение.

Существует два решения, основанных на том, что должен делать ваш код:

  1. Убедитесь, чтобаза данных фактически возвращает только одну запись результата (например, путем добавления уникального индекса в столбец имени пользователя.

  2. Не используйте метод uniqueResult (), если запрос фактически должен возвращать больше, чемодна запись результата.

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