浏览 16364 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-19
在mysql下 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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-24
如果where条件的取值要在程序运行期间动态决定,该如何做?
试了改成where="field= :aaa" 然后在程序中query.setParameter("field", "value") 这样会出错 后来找到了用filter的解决方法,但如果用where能解决最好了 |
|
返回顶楼 | |
发表时间:2007-03-06
阔别这个项目一个月我也碰到这个问题了..
没办法,用楼上指点的明路Filter解决了问题. filter 的用法 参见hibernate doc Chapter 17. Filtering data |
|
返回顶楼 | |
发表时间:2007-04-28
动态取的时候就考虑写criteria.
呵呵,应该是最笨的方法! |
|
返回顶楼 | |
发表时间:2007-05-28
这里就已经丧失了数据库移植性了:
<set name="scores" cascade="none" where="valid_date >= curdate()"> <key column="CARD_ID"/> <one-to-many class="Score" /> </set> where="valid_date >= curdate()" 就是用的sql,不是hsql. 不清楚hsql里面是否有求当前时间的函数 |
|
返回顶楼 | |
发表时间:2007-05-30
spiritfrog 写道 这里就已经丧失了数据库移植性了:<set name="scores" cascade="none" where="valid_date >= curdate()">
<key column="CARD_ID"/> <one-to-many class="Score" /> </set> where="valid_date >= curdate()" 就是用的sql,不是hsql. 不清楚hsql里面是否有求当前时间的函数 如果处处考虑数据库的移植性,将会浪费当前的数据的性能,因此,我一般只针对数据库考虑问题,尤其是程序上实现起来复杂的,但某个特定数据库却可以使用一个方法搞定的那种………………, |
|
返回顶楼 | |
发表时间:2007-07-11
<set name="scores" cascade="none" where="valid_date >= curdate()">
<key column="CARD_ID"/> <one-to-many class="Score" /> </set> 请问lz,如果你的那个card表不仅仅与score表进行关联查询,而是在根据需求在不同情况与不同的表进行关联查询,那么该怎么去处理呢,还是要对这个set进行配置吗,不好意思刚开始用hibernate出现n多疑问无法解决。 |
|
返回顶楼 | |
发表时间:2007-07-25
s.invalid_date >=curdate() 这个条件可以写在hql的with条件中,没必要用filter.
用HQL的current_date()表达式。 on中的过滤条件和where中的过滤条件在SQL语句中的执行顺序是不一样的。 |
|
返回顶楼 | |
发表时间:2007-07-31
如果在set中配置的key不是另外表的关键字,条件也不需要用到key,是不是就不能用hql进行左连接查询了阿,
|
|
返回顶楼 | |