2014-10-29 78 views
0

我想通过休眠来从数据库检索数据。但是当我刷新我的jsp页面时,我收到了“org.hibernate.TransactionException:嵌套事务不受支持”异常。有时候我能够得到结果,但有时我会超出例外。我只在代码中使用beginTransaction()方法一次。但仍然得到例外。什么可能是根本原因。获取类org.hibernate.TransactionException:不支持嵌套事务

My code is : 
      StringBuilder sb = new StringBuilder(); 
      sb.append("{").append(STATUS).append(OK).append(", ").append(RESULTS); 
      sb.append("["); 

      if(session == null){ 
       return getErrorMsgJson("Failed to get DB Session"); 
      } 

      try { 
      session.beginTransaction(); 

      ListIterator iterator3 = session.createSQLQuery(sqlStr).list().listIterator(); 

      int t=0; 
      while(iterator3.hasNext()){ 

       Object obj; 
       Object obj3[]=null; 
       if((obj=iterator3.next()) instanceof BigInteger){ 

        sb.append("\""); 
        sb.append(obj.toString()); 
        sb.append("\""); 
        break; 

       } 
       else{ 
        obj3 = (Object[])iterator3.previous(); 

        for(int i=0;i<obj3.length;i++){ 
         sb.append("\""); 
         sb.append(obj3[i].toString()); 
         sb.append("\""); 
         if(t<obj3.length){ 
         sb.append(","); 
         } 

        } 

       } 
       iterator3.next(); 
       t++; 

      } 
      //session.getTransaction().commit(); 
      sb.append("] }"); 
      return sb.toString(); 

     } 
     catch (Exception e) { 
      //Log.logErr(Logc.JS, Logc.JS_INTERNAL_ERR, "Exception while getting DB Connection"); 
      //out.println("Exception while getting DB Connection"); 
      //return getErrorMsgJson(e.getClass().getName()+" : "+e.getMessage()); 

      //return getErrorMsgJson(e.getClass()+" "+e.getMessage()); 
      //e.printStackTrace(); 
      return getErrorMsgJson(e.getClass()+" : "+e.getMessage()); 
     } 

在此先感谢。

+0

可能重复[如何避免嵌套事务不支持错误?(http://stackoverflow.com/questions/17542157/how-to-avoid-nested-transactions-not-supported-error) – 2014-10-29 09:44:34

+0

请粘贴完整的代码。 – 2014-10-29 09:45:07

+0

粘贴整个代码。 – 2014-10-29 12:37:10

回答

0

你没有关闭你的会话,因此使用了许多不支持的事务。

您可以终止屏蔽并关闭会话。

try{ 

//your code 


}catch(Exception e){ 

}finally{ 

session.close(); 

} 

UPDATE 您的交易异常后得到解决。 您正在使用GenericJDBCException。在这里创建SQLQuery,但是您需要指定实体表示该表所代表的实体。

​​ 的
+0

谢谢Shoaib,即使现在我得到相同的异常,并且还得到“class org.hibernate.exception.GenericJDBCException:could not extract ResultSet”at ListIterator iterator3 = session.createSQLQuery(sqlStr).list()。listIterator() ;“ – 2014-10-30 10:04:46

+0

请发布您的查询字符串和堆栈跟踪 – 2014-10-30 10:14:01

+0

查询是:select * from table_name,此表名可以是来自postgress db的任何有效的现有表名。org.apache.jasper.JasperException:处理JSP页面/ ATSystemEntry时发生异常。 JSP在管线80 77:\t \t \t \t 78:\t \t \t \t //的ListIterator iterator3 =执行Session.createSQLQuery (sqlStr).LIST()的ListIterator(); 79:\t \t \t \t 80:\t \t \t \t列表列表=执行Session.createSQLQuery(sqlStr).LIST(); 81:\t \t \t \t尝试{ 82:\t \t \t \t的ListIterator iterator3 = list.listIterator(); – 2014-10-31 06:05:34