hql left join on应用问题
2009-06-26 08:59
246 查看
网摘一:
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不是很熟,一个问题的记录而已。
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不是很熟,一个问题的记录而已。
相关文章推荐
- hql left join on应用问题
- mysql left( right ) join使用on 与where 筛选的差异 博客分类: mysql MySQLSQL数据结构 有这样的一个问题mysql查询使用mysql中left(
- hibernate HQL left join on 使用及多表连接取不同表(封装类)字段数据显示解决办法
- 解析sql语句中left_join、inner_join中的on与where的区别
- sql语法:inner join on, left join on, right join on详细使用方
- msyql left join on 后面多个条件
- left join on and与left join on where的区别
- VIDIOC_STREAMON: No space left on device 问题解决
- sql的join语句转成hql出现的问题
- sql语法:inner join on, left join on, right join on详细使用方法
- mysql left( right ) join使用on 与where 筛选的差异
- msyql left join on 后面多个条件
- inner join on, left join on, right join on
- Linux下 打开多个USB 2.0 摄像头的问题( libv4l2: error turning on stream: No space left on device )
- inner join on, left join on, right join on讲解
- left join on 和where条件的放置
- mysql left( right ) join 使用on 与where的差异
- 解析sql语句中left_join、inner_join中的on与where的区别
- sql语法:inner join on, left join on, right join on详细使用方法