我有一个String sql存放拼好的SQL语句
List list = null;
Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();获得session后,执行到这一句
list = session.createSQLQuery(sql).list();程序集没有动静了,单步dubug到这里,程序就不走了这是什么原因?

解决方案 »

  1.   

    session 为空或是不能获得。
      

  2.   

    贴出报的错误来猜能分析的。。
      关注ing
      

  3.   

    首先,2楼的,session如果为空的话就报空指针了,还有如果是没获得的话,就不会运行下来;
    3楼的,我的程序就没报错,只是停下来了,什么都不动!就好像是进了死循环了一样,时间特别特别长
      

  4.   

    sql语句的问题吧 贴出来看看吧 
      

  5.   

    createSQLQuery(sql)  会不会是 你的参数传的是HQL 不是SQL
      

  6.   

    敢问楼主 HQL不是很好用吗
    怎么用上SQL了? 
    何解?
      

  7.   

    HQL有些做复杂一些的业务时就不能够满足,所以用SQL!
    LZ把SQL贴出来看看
      

  8.   

    楼主尝试下执行查询语句前,清空下session缓存,有可能你查询的某个对象处于持久化状态或流离状态。
      

  9.   


    Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();这个东西不是很好。。hibernate模板的拿到session,然后执行sql会导致多次查询之后,就查不出来了你的sql没有问题。原因估计是你每次都执行这段话的时候都会创建一个session而这个session是不会被关掉的,因为你没关。所以多次查询就这样了。不动了。具体原因不知。好的办法是用HQL不会出现这个问题。HQL不支持的语句,可以用JDBC模板。就是spring的那个JdbcTemplate 然后.getSession().query(XXXX)。试试吧。
      

  10.   

    啊,记错了。jdbcTemplate是直接调用query方法的。不用拿到session
      

  11.   

    学习楼主用了spring,为什么不用 HibernateDaoSupport 获取 session呢。这样可以避免问题发生。
      

  12.   

    十楼说的有理,但是我们处理时不能那么干,楼主用的是getCurrentSession();这样的话每次去session时是去拿之前的session,也就是说上下文中(一个线程)始终是一个session,如果别的地方用的话这就是空的,在这个地方应该用openSession();之后再beginTransaction();就可以了,不过这种方法执行最后需要session.close().
      

  13.   

    看了一篇博客之后才知道,原生sql查询不能直接把hibernate生成的bean作为对象装入List,所以应该是list = session.createSQLQuery(sql).addEntity(XXXX.class).list();原帖地址:http://stta04.iteye.com/blog/377633