在一个项目的某一个查询场景中,TEACHER表是主表,STUDENT表是TEACHER的子表,两者是以一对多的方式关联。业务逻辑需要查询多条TEACHER表的数据,并且在查询出每条A表数据的同时还需要将对应STUDENT表的行数取出来。我们当然可以利用Hibernate先将每条TEACHER数据load进来以后再以TEACHER.getStudents().size()这种方式取得对应的行数,但是代码会显得很繁琐并且增加了许多需要执行的SQL语句,有没有什么替代的方法呢?
我们可以使用Hiberante的formula。
为了解决前面提到的问题,我们只需要在TEACHER 的orm配置文件里加上这样一个property,定义其formula属性如下:
...
<property name="rowCount" formula="(select count(*) from STUDENT a where a.ID=teacherId)"
type="java.lang.String" />
...
通过这种方式我们就可以在取得每一个TEACHER持久化对象的时候就方便的得到了需要的统计信息,可以大幅度的提高我们的开发效率。注意这里不单单可以用来统计记数,还可以用于sum,avg等其他统计。
在Hibernate 3.x之前,formula属性只能够出现在property元素中。现在仍然可以这样做,但是Hibernate
3.x提供了一个formula属性或元素(两者在formula的用法方面实质上是等效的),可以在许多元素中使用,包括discriminator、
many-to-one、one-to-one、element、many-to-many、map-key、map-key-many-to-many
和property。这样就大大提高了对象关系映射的灵活性,从而支持对复杂数据
模型的更为细粒度的解释。
从3.x开始,Hibernate 使用formula、filter、subselect等提高映射灵活性,提供细粒度的解释特性,从而将其推进到一个新的级别。
需要知道更多的有关formula使用方法的,可以参考 这一篇
分享到:
相关推荐
2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
《Hibernate Annotations 中文帮助文档》提供了关于如何在Java应用程序中使用Hibernate ORM框架进行数据库映射的详细指南。Hibernate Annotations是Hibernate框架的一部分,它允许开发者使用Java注解来定义对象关系...
在创建一个使用 Hibernate 注解的项目之前,需要满足一定的系统环境需求,例如支持 Java 的开发环境、JDK 版本、支持 Hibernate 的应用服务器等。 ##### 1.2 系统配置 为了使 Hibernate 正常运行,还需要进行相应的...
2. **聚合数据展示**:例如,在一个新闻应用中,可能需要展示每篇新闻的全文内容,而这个全文内容可能是由新闻的标题和正文组合而成。此时,就可以通过`@Formula`来实现这个功能。 3. **性能优化**:当某个计算结果...
该章节详细介绍了如何创建并运行一个简单的 Hibernate 应用程序。 - **1.1.1 设置**:这部分讲解了搭建 Hibernate 开发环境所需的步骤,包括 Java 开发环境的准备、Hibernate 库文件的获取以及开发工具的选择等。 -...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...
Hibernate作为一个流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java应用程序能够更加方便地操作数据库。 #### 二、创建注解项目 ##### 2.1 系统需求 在创建一个基于注解的Hibernate项目之前,...
Hibernate Annotations作为Hibernate框架的重要组成部分,使得Java应用与数据库之间的交互更加简单和直观。通过理解这些知识点,开发者可以有效地利用Hibernate Annotations来构建高效、可维护的数据持久层代码。
5.1.19. 字段和规则元素(column and formula elements) 5.1.20. 引用(import) 5.1.21. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. SQL中引号包围...
实体 Bean 是 Hibernate 中的核心概念之一,用于表示应用程序中的业务对象。通过 EJB3 注解,可以将 Java 对象映射到数据库表。 ##### 3.2 用 EJB3 注解进行映射 - **声明实体 Bean**:使用 `@Entity` 注解来声明一...
5.1. 一个简单的POJO例子 5.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)...
5.1. 一个简单的POJO例子 5.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)...
第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射...
5.1.19. 字段和规则元素(column and formula elements) 5.1.20. 引用(import) 5.1.21. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. SQL中引号包围...
通过以上知识点的详细介绍,我们可以看到Hibernate Annotations不仅简化了Java应用与数据库之间的交互过程,还提供了丰富的特性来应对复杂的应用场景。无论是从简单的实体映射到复杂的关联关系管理,还是从查询优化...
1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. ...