from A a ,B b
left outer join b.C c
where a.id=b.id and a.name='chy' and c.date='2006-1-31'

解决方案 »

  1.   

    这种方法我试过了,关键问题就在这里,如果c.date='2006-1-31'
    写在where里就是先left join,后在连接后的表中筛选,而我的本意是先在c表中筛选,后将c表与a,b表做左连接,这两种方法的结果是截然不同的
      

  2.   

    是不是hibernate不支持join中加入条件呢?
      

  3.   

    难道没有人会吗?真的是hibernate不支持吧?
      

  4.   

    http://community.csdn.net/Expert/TopicView3.asp?id=5026822
      

  5.   

    Saro(这也不是江水,这是二十年流不尽的英雄血。谢谢!!我觉的你的方法没有问题,但是我在主表的<set></set>中加入了<filter name="datefilter" />,
    并加入<filter-def name="datefilter" condition="date=:date" >
    <filter-param name="date" type="java.util.Date" />
    </filter-def>
    结果启动jboss时报错:
    org.hibernate.MappingException: Could not read mapping document from file: D:\jboss-4.0.2\server\default...Caused by: java.lang.NullPointerException
    at org.hibernate.cfg.HbmBinder.parseFilter我又试在子表中加入<filter-def name="datefilter" condition="date=:date" >
    <filter-param name="date" type="java.util.Date" />
    </filter-def>
    可还是报错。恳请指教!!
      

  6.   

    我又配置了一下:
    主表:
    <set name="msfaRegisterBO" inverse="true" >
                 <key column="measure_id" property-ref="measureId"/>
                 <one-to-many class="MSfaRegisterBO"/>
                 <filter name="datefilter" condition="branchId=:branchId" />
    </set>子表:
    <class>
    <many-to-one name="msfaPubKpiBO" class="com.sihitech.biplatform.common.model.bo.MSfaPubKpiBO" 
    column="measure_id" property-ref="measureId" not-null="true"/>
    <filter name="datefilter" condition="branch_id=:branchId" />
        </class>
         <filter-def name="datefilter" >
    <filter-param name="branchId" type="java.lang.String" />
    </filter-def>
      

  7.   

    然后在publicDAO里:
    String parm = "000000001";
    hibernateTemplate.getSessionFactory().openSession().enableFilter("datefilter").setParameter("branchId",parm);
    String hql = "from  com.sihitech.biplatform.common.model.bo.MSfaRegisterBO";
    List list = hibernateTemplate.find(hql);
    现在服务不报错了,但是查出来发现数据没有经过筛选,好像filter没有用,是不是我哪里配错了?