2011-06-30 80 views
0

提交事务,我得到当我使用tx.commit一个以上的时间这个错误有关休眠

报告type'exception

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帮我

+0

大多数本网站的用户讲英语,如果你的问题是英文,你会得到更好的答案:http://blog.stackoverflow.com/2009/07/non-english-question-policy/ –

+0

我编辑thx帮助 – David

回答

2

您的电话号码

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

所以被执行的查询应该返回一个单一的结果。 但是执行这个查询实际上已经返回了2个导致异常的结果记录。

有根据你的代码是应该做的两种解决方案:

  1. 确保数据库实际上只返回一个结果记录(例如,通过添加一个唯一索引username列

  2. 不要使用uniqueResult()方法,如果查询实际上应该返回多个结果记录。