你好,我在SSH中遇到了下面的问题,不知道怎么回事了,希望大家帮忙看看,谢谢--------------------------------------------------
下面是Dao层中代码:情况一: String hql="from com.common.valuebean.GoodsBean";
 List list=getHibernateTemplate().find(hql);
      
       这样不会出问题,但象下面情况二这样写,如果不用session.bgeinTransaction()
       就会出org.hibernate.HibernateException: createQuery is not valid without active transaction异常
--------------------------------------------------------------
情况二:String hql="from com.common.valuebean.GoodsBean";
Session session=getHibernateTemplate().getSessionFactory()
.getCurrentSession();
Transaction tran=session.beginTransaction();/////////???????????????
Query query=session.createQuery(hql);异常:javax.servlet.ServletException: org.hibernate.HibernateException: createQuery is not valid without active transaction

解决方案 »

  1.   

    不管怎么样都是需要事物的,只不过第一种情况是spring的声明式事物,它不侵占代码,所以你在代码里看不到关于事物的代码。
      

  2.   

    spring是声明式事务,所以在程序中不需要去写事务代码
    只需要在配置文件进行配置即可,包括session的创建等等 这些东西  都是通过配置文件来进行获取
    最开始是配置sessionFactory的 然后自动去获取session 
    而如果通过hibernate单独获取session的话 ,那么就需要自己配置事务
      

  3.   

    谢谢大家,SSH中我是为了用query.setFirstResult(); query.setMaxResults()处理分页,才用情况二获得Query,这样又要重新dao里写事务的代码啊,总感觉不妥,有没有还是把事务交给spring处理,又能得到Query啊,能很好处理分页