//数据库表hi_partyitems 映射Hibernian成HiPartyitems         String hql="from HiPartyitems";
         String sql ="select * from HiPartyitems";         1.  Session session = HibernateFactory.getSession();
2.  Transaction tx = session.beginTransaction();
3.  //Query query = session.createQuery(hql);
4.  SQLQuery query =session.createSQLQuery(this.pSql);
5.  tx.begin();
6.  List list = query.list();
7.  try {
8. count = list.size();
   } catch (HibernateException ex) {
ex.printStackTrace();    } finally {
       HibernateUtil.closeSession();
    }建立一个SQLQuery 执行到第6行就不走了,也没异常,但是用第3行的就行,屏蔽掉第4行就行,为什么呢?难道是我的sql写错了?如果大家都不懂,就把“select p.* m.city from party p inner join message m on party.itemid=message.itemid where City='上海'”  变成hql好了,我就不用改成SQLQuery了。

解决方案 »

  1.   

    Transaction tx = session.beginTransaction();
    事务tx没关闭吧!加句tx.commit();试试
      

  2.   

    createSQLQuery操纵的是数据库的表。而看看你的SQL:
    String sql ="select * from HiPartyitems";
    是表名吗?不是吧。是类名。
    所以,把类名HiPartyitems改为表名hi_partyitems 查询可以不用事务。可以把事务的语句全去掉。
    tx.begin();
    没有。去掉。
      

  3.   

    用不用事务无所谓的,只要分清HQL操纵的是对象而SQL语句操纵的是数据库中的表就行了,别把两者用混了,
    HQL是面向对象的数据库操作语言,做的操作有多步又要保证数据同步的时候才会采用事务,而像你这种单表查询是没有必要用的.
      

  4.   

    使用 Debug 查看,设置节点
      

  5.   

    HQL操作对象,应该是类名,SQL是表名