2014-10-29 76 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