日期:2014-05-20  浏览次数:20649 次

session.createSQLQuery(sql).list()问题,很怪异...
我有一个String sql存放拼好的SQL语句
List list = null;
Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();

获得session后,执行到这一句
list = session.createSQLQuery(sql).list();

程序集没有动静了,单步dubug到这里,程序就不走了

这是什么原因?

------解决方案--------------------
session 为空或是不能获得。
------解决方案--------------------
贴出报的错误来猜能分析的。。
关注ing
------解决方案--------------------
sql语句的问题吧 贴出来看看吧
------解决方案--------------------
把你sql语句贴出来看看!
------解决方案--------------------
createSQLQuery(sql) 会不会是 你的参数传的是HQL 不是SQL
------解决方案--------------------
敢问楼主 HQL不是很好用吗
怎么用上SQL了? 
何解?

------解决方案--------------------
HQL有些做复杂一些的业务时就不能够满足,所以用SQL!
LZ把SQL贴出来看看
------解决方案--------------------
楼上能举个例子吗?
空口无凭
------解决方案--------------------
楼主尝试下执行查询语句前,清空下session缓存,有可能你查询的某个对象处于持久化状态或流离状态。
------解决方案--------------------
顶...我新手。呵呵..
------解决方案--------------------

Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();

这个东西不是很好。。hibernate模板的拿到session,然后执行sql会导致多次查询之后,就查不出来了

你的sql没有问题。原因估计是你每次都执行这段话的时候都会创建一个session而这个session是不会被关掉的,因为你没关。所以多次查询就这样了。不动了。具体原因不知。

好的办法是用HQL不会出现这个问题。HQL不支持的语句,可以用JDBC模板。就是spring的那个JdbcTemplate 然后.getSession().query(XXXX)。

试试吧。