获取类org.hibernate.TransactionException:不支持嵌套事务

时间:2014-10-29 09:40:25

标签: database hibernate jsp exception transactions

我试图通过hibernate从数据库中检索数据。但我得到" org.hibernate.TransactionException:不支持嵌套事务"刷新jsp页面时出现异常。有时候我能够得到结果,但有时候我会超越异常。我在代码中只使用了一次beginTransaction()方法。但仍然得到例外。可能是根本原因。

 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());
        } 

提前致谢。

1 个答案:

答案 0 :(得分:0)

您没有关闭会话,因此使用了许多不受支持的交易。

您最终可以阻止并关闭其中的会话。

try{

//your code


}catch(Exception e){

}finally{

session.close();

}

<强>更新 解决了事务性异常后。 您正在获得GenericJDBCException。在这里创建SQLQuery但是您需要指定实体表示该表所代表的实体。

SQLQuery query = session.createSQLQuery(sql);
         query.addEntity(Employee.class);
Iterator itr = query.list().listIterator();