我的项目是SSH架构的 
在hibernate的一对多查询中 
一表:item  多表:subitem 我想查item的时候也把subitem也都查出来 ,所以我的hql语句这么写的: 
String hql = "FROM Item AS i left join fetch i.subitems order by i.itemid asc"; 
List list = super.getSession().createQuery(hql).list(); 
我想在把item用itemid去排序,可是在Eclipse中拼出来的sql语句没有加上order by i.itemid的排序,而是用我配置文件中(item.hbm.xml)中的排序 Eclipse中拼的sql是这样的: 
Hibernate: select item0_.itemid as itemid0_, subitems1_.subid as subid1_, item0_.itemname as itemname6_0_, item0_.itemcode as itemcode6_0_, subitems1_.subname as subname7_1_, subitems1_.subcode as subcode7_1_, subitems1_.itemid as itemid7_1_, subitems1_.itemid as itemid0__, subitems1_.subid as subid0__ from item item0_ left outer join subitem subitems1_ on item0_.itemid=subitems1_.itemid order by subitems1_.subcode(为什么没有把我HQL中的order-by加上) 我的item.hbm.xml中关于subitem的配置 
<set name="subitems" table="subitem" inverse="true" cascade="all" order-by="subcode"> 
        <key> 
        <column name="itemid"> </column> 
        </key> 
        <one-to-many class="org.zwx.myznt.vo.Subitem" /> 
</set> 
 
 
 
归根结底,item.hbm.xml中 <set order-by>和我hql中的order by到底哪个优先级更高 
我要是想给item排序该怎么办,前提是还要在 <set>中按subcode排序 
跪求帮忙,不胜感激 

解决方案 »

  1.   

    应该是后执行那个为准,
    比如你拼装了hql,但是最终要转换成标准的sql,就要根据配置文件,这个时候配置文件的subcode起作用了。至于优先级,没测试过,等楼下回答吧。
      

  2.   

    不会吧,如果两个都有order by的话,那么会都打出来,本机测试通过
    我的hibernate版本是3.2.2.ga
    测试数据如下:
        <set name="cardRecords" table="CardRecord" inverse="true" order-by="cardRecordId">
                <key>
                    <column name="personCode" />
                </key>
                <one-to-many class="com.lan.adms.domain.CardRecord" />
            </set>
    Iterator<Person> persons = session.createQuery("from Person p left join fetch p.cardRecords order by p.personID asc").list().iterator();
    结果如下
    Hibernate: select person0_.personID as personID1_0_, ...... order by person0_.personID asc, cardrecord1_.cardRecordId
    或许是版本问题
      

  3.   

    可能是版本问题。我试过同样的带Order By的HQL在Mysql下正常,在DB2下不能运行。
      

  4.   

    呵呵,我就不回答了。支持3楼的做法。另外你的查询是对SubItem的查询,我想你可以考虑直接操作SubItem而不是Item如果你设计正确,完全可以用from SubItem.item where .... 这样拿到Item 
      

  5.   

    感谢三楼,可是我的是在Myeclipse中添加的Hibernate支持的,我看下,有hibernate2.jar还有一个hibernate3.jar
    会不会是版本问题呢
    我自己配了个Hibernate环境测试了一下,和你的结果是一样,可是我的项目在SSH中,出来的结果就是上面的样子
      

  6.   

    如果真的是版本问题,我该在我的项目中怎么改进,这些Jar包我也不敢乱删啊 ,谢谢
      

  7.   

    1 把排序都写在hql中,删除hbm.xml中的排序代码,测试一下2 order-by="itemid,subcode",因为itemid在subitem表中也存在,所以这么写应该没有问题的
    会生成order by subitems1_.itemid,subitems1_.subcode
      

  8.   

    感谢8楼楼主,第一中我试过了,item是排序了,可是subitem没有被排序
    刚才我试了你的第二种,写出order-by="itemid,subcode",这样就可以了 ,谢谢
    不过我还是想问一下 ,为什么光测试hibernate的时候,和3楼楼主说的一样,而到我项目里就不行了呢