0

I'm trying to retrieve data from database through hibernate. But i'm getting "org.hibernate.TransactionException : nested transactions not supported" exception when i refresh my jsp page. Some times i'm able to get the result but some times i'm getting above exception. I'm using beginTransaction() method only one time in the code. But still getting the exception. What might be the root cause.

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

Thanks in advance.

ADITYA VALLURU
  • 111
  • 1
  • 3
  • 10

1 Answers1

0

Your are not closing your session, hence many transactions are used which are not supported.

You can have finally block and close the session in it.

try{

//your code


}catch(Exception e){

}finally{

session.close();

}

UPDATE After your transactional exception is resolved. You are getting GenericJDBCException. Here you creating SQLQuery but you need to specify entity that which entity that table represents.

SQLQuery query = session.createSQLQuery(sql);
         query.addEntity(Employee.class);
Iterator itr = query.list().listIterator();
Shoaib Chikate
  • 8,665
  • 12
  • 47
  • 70
  • Thanks Shoaib, Even now i'm getting the same exception and also getting "class org.hibernate.exception.GenericJDBCException : could not extract ResultSet" at ListIterator iterator3 = session.createSQLQuery(sqlStr).list().listIterator();" – ADITYA VALLURU Oct 30 '14 at 10:04
  • Please post ur queryString and also stacktrace – Shoaib Chikate Oct 30 '14 at 10:14
  • query is : select * from table_name, this table name can be any valid existing table name from postgress db. org.apache.jasper.JasperException: An exception occurred processing JSP page /ATSystemEntry.jsp at line 80 77: 78: //ListIterator iterator3 = session.createSQLQuery(sqlStr).list().listIterator(); 79: 80: List list = session.createSQLQuery(sqlStr).list(); 81: try { 82: ListIterator iterator3 = list.listIterator(); – ADITYA VALLURU Oct 31 '14 at 06:05
  • org.hibernate.exception.GenericJDBCException: could not extract ResultSet org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91) org.hibernate.loader.Loader.getResultSet(Loader.java:2065) – ADITYA VALLURU Oct 31 '14 at 06:10
  • org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) org.hibernate.loader.Loader.doQuery(Loader.java:909) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) org.hibernate.loader.Loader.doList(Loader.java:2553) org.hibernate.loader.Loader.doList(Loader.java:2539) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) org.hibernate.loader.Loader.list(Loader.java:2364) – ADITYA VALLURU Oct 31 '14 at 06:11
  • org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311) org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141) org.apache.jsp.ATSystemEntry_jsp.getDBResult(ATSystemEntry_jsp.java:90) org.apache.jsp.ATSystemEntry_jsp.getResult(ATSystemEntry_jsp.java:52) org.apache.jsp.ATSystemEntry_jsp._jspService(ATSystemEntry_jsp.java:578) – ADITYA VALLURU Oct 31 '14 at 06:12
  • if i query "select gid from gTable" it is giving CCE:java.lang.Integer cannot be cast to [Ljava.lang.Object – ADITYA VALLURU Oct 31 '14 at 07:51
  • If you are giving projections such gid etc then list() will not return List it will return List. I guess your problem of Transactional exception is solved. You can mark this answer as accepted or update your question – Shoaib Chikate Oct 31 '14 at 08:03