玩 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
相关推荐
在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据库表之间的关联方式,它表示一个实体可以与多个其他实体进行关联,反之亦然。本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、...
"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
在Hibernate中,可以通过 `<many-to-one>` 或者 `<one-to-many>` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`<many-to-one>` 标签中包含了 `cascade` 属性的注释示例,但是...
本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...
在Java的持久化框架Hibernate中,Many-to-Many映射是一种常见的关系模型,它用于表示两个实体类之间多对多的关系。在这个主题中,我们将深入探讨如何使用注解来实现这种映射,以及其背后的数据库原理和实际应用。 ...
"Hibernate many-to-many"指的是Hibernate中处理多对多关联关系的一种方式。多对多关系是两个实体类之间存在的一种复杂关联,比如学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 ...
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 ...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
在Hibernate中,一对一唯一外键关联映射可以通过 `<many-to-one>` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml <many-to-one name="idCard" column="card_id...
对于`Department`,映射文件中会有一个`<class>`标签,其中包含`<set>`标签来定义员工集合,并且使用`<many-to-many>`或`<one-to-many>`标签来映射与`Employee`的关系。对于`Employee`,我们使用`<class>`标签,并在...
赠送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-configuration-3.0.dtd`还定义了如何设置JNDI数据源,以及如何启用二进制日志、SQL查询统计等功能。 接下来,我们转向`hibernate-mapping-3.0.dtd`。这个文件定义了Hibernate映射文件的语法规则,...
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来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...
而`Classes.hbm.xml`则使用了`<set>`和`<one-to-many>`元素,表示班级对象包含一个学生集合,且每个学生都有对应的`id`。 在处理这种关联关系时,需要注意的是效率问题。由于Hibernate默认会在"一"端更新关联关系,...
《Eclipse中Hibernate插件深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Eclipse作为主流的Java集成开发环境,其丰富的插件生态使得开发效率得以提升。...
3. **HQL和SQL查询编辑器**:提供了集成的HQL(Hibernate Query Language)和SQL查询编辑器,支持语法高亮、自动补全,以及对查询结果的可视化展示。 4. **JPA注解工具**:允许将传统的Hibernate映射文件转换为Java...