对于比较复杂的SQL,我喜欢使用Hibernate的native SQL功能。
先在hbm.xml中写一个namedSQL,再在程序中调用这个namedSQL。也许这个会适合你的情况。如果你一定要使用HSQL,看看“select t.* from EaminationRoomPlan t”这个HSQL能执行吗?如果它不能执行,就看看配置文件是否正确;
如果能执行,请你检查t.fkClassroom和b.pk是不是相同的类型,如果t.fkClassroom是Classroom类型的变量,而b.pk是Integer的,那么你的hSQL当然不能执行!这时,你要把hSQL写成:
String hql = " select t.* from ExaminationRoomPlan t, Classroom b where t.fkClassroom.pk = b.pk order by b.teachingBuilding, b.floor, b.no

解决方案 »

  1.   

    sql = select t.* from examination_room_plan t, classroom b  where t.FK_CLASSROOM = b.pk  order by b.teaching_building, b.floor, b.no把t.*改成 tsqlQuery.addEntity("t", ExaminationRoomPlan.class)去掉同时保证你所有的属性都拼写正确我很怀疑FK_CLASSROOM拼写是否正确Hibernate不差劲,就看你是否会用了
      

  2.   

    我的SQL绝对没有问题,直接在pl/sql里面执行是正常的。
    试了冒用。。
    sqlQuery.addEntity("t", ExaminationRoomPlan.class)不加上这个就报错。。
      

  3.   

    错误呢?复杂的sql,hibernate是很悲惨,不过这个很简单,应该没问题
      

  4.   

    String hql = " select t.* from ExaminationRoomPlan t, Classroom b where t.fkClassroom = b.pk order by b.teachingBuilding, b.floor, b.no"中的t.fkClassroom = b.pk,貌似是不能这么写的
    一般来说是把一个Classroom的对象做为ExaminationRoomPlan的一个属性,然后在hbm文件中配置这两个类的关系(一对一、一对多、多对多)
    在写hql时直接这样写——
    select t.* from ExaminationRoomPlan t join t.classroom b where b.otherColumn = ? order by b.teachingBuilding, b.floor, b.no
    hibernate会根据配置文件自动决定t中的那个字段跟b中的某个字段相等
      

  5.   

    hibernate支持hql,也支持原生SQL。sql = select t.* from examination_room_plan t, classroom b where t.FK_CLASSROOM = b.pk order by b.teaching_building, b.floor, b.no
    中的t.*改为{t.*}
      

  6.   

    我特别理解你,昨晚上我弄struts弄了一宿,错误依旧。
    真有一种把电脑砸了的冲动
    呵呵
    别着急,慢慢来
      

  7.   

    把错误报告弄上来啊
    你可以尝试把SQL精简下,看是配置问题还是语句问题
      

  8.   

    直接在SQL里执行看可以查出来吧
      

  9.   

    String hql = " select t.* from ExaminationRoomPlan as  t, Classroom as b where t.fkClassroom = b.pk order by b.teachingBuilding, b.floor, b.no
    ---------
    先加as试试,如果还不行
    自己写一个带main 的小测试类,这种测试类可以有简单明了的出错信息,不带main的类,是没有出错信息的.^_^别那么急,大家都是这么活着的,对自己要求低点
      

  10.   

    J2EE技术群,有空过来坐坐34104450
      

  11.   

    回复人:rickhunterchen(千山鸟飞绝) ( 两星(中级)) 信誉:100  2007-6-26 10:24:38  得分:0
    ?  hibernate支持hql,也支持原生SQL。sql = select t.* from examination_room_plan t, classroom b where t.FK_CLASSROOM = b.pk order by b.teaching_building, b.floor, b.no
    中的t.*改为{t.*}你的这种写法我早就写过了,是不行的。
    我就是用的SQL写的。
      

  12.   

    其实说实话,我也不想写这样一个标题,也许是我不了解,但我个人从技术角度来讲,这是一个简单的问题,,为什么就在Hibernate里面实现起来这么复杂。。真的很郁闷,
      

  13.   

    select t from ExaminationRoomPlan t, Classroom b where t.fkClassroom = b.pk order by b.teaching_building, b.floor, b.no
      

  14.   

    这是我们项目中写的代码片段:public List getAllByUserId(String userId) {
    final String sql="select {fi.*} from FuncInfo fi " +
       "left join RoleSubFunc rsf on fi.FuncId=rsf.FuncId "+ 
           "left join RoleInfo ri on rsf.RoleId=ri.RoleId "+ 
           "left join UserRole ur on ri.RoleId=ur.RoleId "+ 
           "where ur.UserId='"+userId+"'";
    return this.getHibernateTemplate().executeFind(new HibernateCallback(){

    public List doInHibernate(Session session) throws HibernateException, SQLException {
    Query query=session.createSQLQuery(sql)
    .addEntity("fi", FuncInfo.class);
    return query.list();
    }
    });
    }
      

  15.   

    调试的时候可以设置显示sql语句,这样方便一些。
    我也是初学hibernate,感觉很多时候复杂sql语句的错误原因是没有指定好表的别名。
      

  16.   

    显示SQL 看看就知道了, 不过还是推荐用SQL
      

  17.   

    我这边到是没报错,就是查一个几十条数据的表要好几秒,如果是查询多要等几分钟.但改用jdbc做,速度快100倍吧.
      

  18.   

    同意Saro(这也不是江水,这是二十年流不尽的英雄血。) select t from ExaminationRoomPlan t, Classroom b where t.fkClassroom = b.pk order by b.teachingBuilding, b.floor, b.no还有就是检查属性是否都正确