玩 Grails 的时候,遇到一个问题,卡在 many-to-many 查询上了。之前学 hibernate 不深,所以会卡。
先来看下例子:两个实体类 Blog、Tag,它们是多对多关系。
例如要查找 tag 为 j2ee 的所有博客文章。
1、用 HQL
-
- def blogNum = Blog.executeQuery("select count(bs) from Blog as bs left join bs.tags as t where t.name=:tname",[tname:params.tag])
- def blogs = Blog.executeQuery("select bs from Blog as bs left join bs.tags as t where t.name=:tname",[tname:params.tag], [max:params.max, offset:params.offset])
hql 是比 sql 方便,sql 要多写一个 join。但要对 hql 熟悉才行。
2、用 Criteria
-
- def c = Blog.createCriteria()
- def blogNum = c {
- projections {
- count('id')
- }
- tags {
- eq('name', params.tag)
- }
- }
-
- def blogC = Blog.createCriteria()
- def blogs = blogC.list {
- tags {
- eq('name', params.tag)
- }
- firstResult(params.offset)
- maxResults(params.max)
- }
看了它们的输出 sql,基本没区别,Criteria 的方式是用 left outer join 的,其实与 left join 一样,用 hql 就可以自己控制 join 吧,还有就是可以节省两个匿名类。还是选择用 hql 方式吧。
可能还有其它方式……
hibernate 3.x 的 hql 中文手册:http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/queryhql.html
相关推荐
hibernate many-to-many级联保存,级联更新,级联删除
深入理解hibernate many-to-one(多对一)及 cascade(级联).
NULL 博文链接:https://xiangtui.iteye.com/blog/680938
免费为大家服务 Hibernate one-to-many-annotation
Hibernate应用例子many-to-many
NULL 博文链接:https://zhouxianglh.iteye.com/blog/569471
hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向
无偿奉献代码
两套hibernate级联例子,jar包已经包含在里面了,运行代码也写好了,数据库直接会自动生成表的,就差你运行了,你懂的
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
HibernateTools-3.2.4,Hibernate工具包,开发使用,欢迎下载
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
Hibernate中many-to-one关系的编写_远航的水手
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
Hibernate中many-to-one关系的编写_远航的水手.htm
今天小编就为大家分享一篇关于Hibernate实现many-to-many的映射关系,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Hibernate-one-to-many
HibernateTools-3.2.4.Beta1-R200810311334.zip
hibernatetools-Update-4.1.1.zip
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码