hql left join on应用问题

网摘一:


sql: select c.* from card c left join score s on s.card_id = c.id and s.invalid_date >=curdate() where s.id is null
在hibernate中要使用left join必须声明关联映射,这里的关联是one-to-many, 在Card里面建一个Set scores,然后配置好
        <set name="scores" cascade="none" where="valid_date >= curdate()">
              <key column="CARD_ID"/>
              <one-to-many class="Score" />
        </set>
唯一特殊的就在于这个where,hql里面不能写on ,所以得on里面的条件都写在where里面,where里面是写的是字段名和针对不同数据库的sql,将导致不同数据库之间的移植增加一些工作量。
hql如下:select c from Card c left join c.scores s  where s.id is null

问题是:在set中配置的key不是另外表的关键字,条件也不需要用到key,又该如何用呢?目前出现的就是这个问题,哎,找不到解决办法,问题先记录下来吧。有时间再看看

网摘之二:
有2个Table:Parent、Children。 
  Parent结构:id(int),   name(string)。主键id。 
  Children结构:parentid(int),   type(int),   name(string)。主键parentid,   type。 
  Children.parentid和Parent.id连接
SQL可写为SELECT   *   FROM   Parent   LEFT   OUTER   JOIN   Children   ON   Parent.id=Children.parentid   AND   Children.type=?或SELECT   *   FROM   Parent   LEFT   OUTER   JOIN   (SELECT   *   FROM   Children   WHERE   type=?)   ON   Parent.id=Children.parentid
<class> 
  .... 
  <set   name="children"   inverse="true"   > 
      <key   column="parent_Id"   /> 
      <one-to-many   class="Parent"   /> 
      <filter   name="typefilter"   /> 
  </set> 
  </class> 
  
  <filter-def   name="typefilter"   condition="type=:type"   > 
                  <filter-param   name="type"   type="string"   /> 
  </filter-def> 
  
  
  session.enableFilter("typefilter").setParameter("type","xxxxxxxx"); 
  List   list=session.createQuery("select   p   from   Parent   p   left   join   p.children   c").list();

问题是我的DB访问层用的是 SimpleHibernateTemplate,这里的Filter就知道如何用了

对hql不是很熟,一个问题的记录而已。

你可能感兴趣的:(JOIN,sql,Hibernate,数据库,String,filter)