+ -
当前位置:首页 → 问答吧 → 【hibernate问题】session.createQuery(hql)该方法阻塞,求解!

【hibernate问题】session.createQuery(hql)该方法阻塞,求解!

时间:2011-09-29

来源:互联网

今天遇到的一个新奇问题,研究了一下午还是没有研究出来。。特发给哥们儿帮看看。。
如下:
public <E> E getDataCountwithHQL(final String hql, final Object... params) {
return (E) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
System.out.println(hql);//这点可以取到hql语句
System.out.println(session.isOpen());//这点返回true
Query query = session.createQuery(hql); //该方法阻塞,不报异常
System.out.println("@@@@@@@@@@@@@@@@@@@");//后面不再打印
System.out.println(query);//后面不再运行
....
}});}

把session.createQuery(hql)改成session.createSQLQuery(sql)则可以完美运行。。如下:

public <E> E getDataCountwithHQL(final String sql, final Object... params) {
return (E) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
System.out.println(sql);//这点可以取到hql语句
System.out.println(session.isOpen());//这点返回true
SQLQuery query = session.createSQLQuery(sql); //运行正常
System.out.println("@@@@@@@@@@@@@@@@@@@");//运行正常
System.out.println(query);//后面运行正常...
....
}});}

代码基本是这样子,考来的时候手动改了一下。。可能有手误,哥儿们帮看看为啥用session.createQuery(hql)的时候会阻塞呢.,最郁闷的是他不报异常,报下异常也好解决吧..!!!!求解啊。。谢谢了

作者: mfkarj   发布时间: 2011-09-29

有些异常是不会主动报的,你要自己去try catch。
先试试一搬的异常exception
Exception并不能捕捉所有的异常,可以使用如下捕捉
不行的话,在试试如下的
try{
...
}catch (Throwable e1) {
}

作者: Rain000   发布时间: 2011-09-30

有些异常是不会自己主动抛异常的。
可先用Exception捕捉,不行的话,在用下面的
Exception并不能捕捉所有的异常,可以使用如下捕捉
try{
...
}catch (Throwable e1) {
}

作者: Rain000   发布时间: 2011-09-30

不懂友情帮顶,应该是你的HQL语句有问题,在那换个简单的试下有无阻塞,

作者: zyz1985   发布时间: 2011-09-30

应该是hql写错了!是不是多了个 select XXX

作者: aqqbjlgu   发布时间: 2011-09-30

确实应该是你HQL写错了 发上来看看呀

作者: bohe_198878   发布时间: 2011-09-30

这肯定是你hql语法写错了。发出来看看。

作者: huangchenliang   发布时间: 2011-09-30

hql语法有问题吧!!发出来看看,

作者: jiohn   发布时间: 2011-09-30

同意以上观点,hql语句问题,贴出来瞧瞧。

作者: cgw1123   发布时间: 2011-09-30

SQLQuery query = session.createSQLQuery(sql); //运行正常
这个是调用原来的SQL语句,那肯定是HQL语句写错了,LZ贴一下参数HQL的值出来吧

作者: jiangdaxian2003   发布时间: 2011-09-30

HQL没写错的:form User where name = ? and pass = ?;后面是动态参数;写SQL语句正常是因为我把HQL换为SQL语句的了..这点偶还是懂的哈...try catch Exception也试过了..

作者: mfkarj   发布时间: 2011-09-30

引用 6 楼 huangchenliang 的回复:

这肯定是你hql语法写错了。发出来看看。


hql语句是从dao层传入的打印为: from User where name = ? and pass = ?;

作者: mfkarj   发布时间: 2011-09-30

try catch 看看报什么错

作者: ajun_studio   发布时间: 2011-09-30

热门下载

更多