程序代码:
public List<WenshuInfo> findBySql(String sql) { log.debug("findBuSql WenshuInfo instances"); Transaction tran = null; Session session = HibernateSessionFactory.getSession(); try { tran = session.beginTransaction(); Query queryObject = session.createQuery(sql); session.flush(); tran.commit(); return queryObject.list(); } catch (RuntimeException re) { if (null != tran) { tran.rollback(); tran = null; } log.error("findBuSql failed", re); re.printStackTrace(); return null; } }
关键代码:return queryObject.list(); 放在了commit后面所以会出现下面的异常。
修改后的代码:
public List<WenshuInfo> findBySql(String sql) { log.debug("findBuSql WenshuInfo instances"); Transaction tran = null; Session session = HibernateSessionFactory.getSession(); try { tran = session.beginTransaction(); Query queryObject = session.createQuery(sql); List<WenshuInfo> list = queryObject.list(); session.flush(); tran.commit(); return list; } catch (RuntimeException re) { if (null != tran) { tran.rollback(); tran = null; } log.error("findBuSql failed", re); re.printStackTrace(); return null; } }
异常信息:
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:149) at com.mylegist.lawgeneral.dao.WenshuInfoDaoIMP.findBySql(WenshuInfoDaoIMP.java:86) at com.mylegist.lawgeneral.service.WenshuInfoServiceIMP.findBySql(WenshuInfoServiceIMP.java:28) at com.mylegist.lawgeneral.action.WenshuAction.execute(WenshuAction.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)