在Hibernate 3 之后,formula(公式,Excel 里常见的) 得到了更广泛的应用,在这里简单记录一下它在 <property> 中的应用。
假如我们要映射这么一个类:
package cc.unmi.model;
public class User {
private int id;
private String name;
Private Set<Order> orders = new HashSet<Order>();
//setter & getter ......
}
User 与 Order 建立了一对多的关联,那么它在 hbm 映射文件的写法大概就是:
<property name="name" type="string" column="name">
<set name="orders">
<key column="user_id"/>
<one-to-many/>
</set>
这两个对象进行的关联,通过 user.getOrders() 可以取得与此用户关联的所有order,user.getOrders().size() 得到订单数量。
不过有时候,我们并不关心 User 有哪些 Oder 对象,或者太多,或是待下次请求再具体查询。而是在查询 User 时只想要只道订单的数量,也是这样一个 User 对象:
package cc.unmi.model;
public class User {
private int id;
private String name;
Private int orderNumber;
//setter & getter ......
}
显然,orderNumber 属性在数据库表中没有相应的字段对应,如果是在 SQL 中我们可以用 count(*) ... group by id 来关联查询,其实在 hbm 映射文件中还更简单,那就是要用到 formula 了,参考配置如下:
<property name="orderCount" type="int">
<formula>(select count(s.id) from order s where s.user_id=id)</formula>
</property>
formula 也可以作为 property 的属性的。注意有几点,这里的 (select count(s.id) from order s where s.user_id=id)
1. 这是一个 sql 和 hql 的混合体
2. 红色部分为 sql 的范畴,所以要对应于数据库的表或字段
3. 蓝色的 id 出自于 hql,即当前 User bean 的 id 属性
4. 不要忘记了两边的括号哦, 因为它会作为 select * from HERE 的子查询的。
分享到:
相关推荐
2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...
5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. 多次...
在Java实体类中使用`@Formula`注解,通常会结合JPA或Hibernate等ORM框架。下面通过一个具体的例子来说明如何使用`@Formula`: ```java @Entity public class News { private int id; private String title; ...
5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. 多次...
5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. 多次...
5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. 多次映射同一个...
《Hibernate Annotations中文帮助文档》是针对Java开发人员的一份详细指南,主要讲解如何使用Hibernate ORM框架中的注解来实现数据库对象的映射。该文档涵盖了从基础到高级的各种概念,帮助开发者更高效地管理和操作...
在创建一个使用 Hibernate 注解的项目之前,需要满足一定的系统环境需求,例如支持 Java 的开发环境、JDK 版本、支持 Hibernate 的应用服务器等。 ##### 1.2 系统配置 为了使 Hibernate 正常运行,还需要进行相应的...
《Hibernate Annotations 中文帮助文档》提供了关于如何在Java应用程序中使用Hibernate ORM框架进行数据库映射的详细指南。Hibernate Annotations是Hibernate框架的一部分,它允许开发者使用Java注解来定义对象关系...
- **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射主键属性:** 主键映射通过`@Id`注解实现。 - **映射继承关系:** - **每个类一张表:** 每个子类对应...
5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.3. 多次...
本文档主要介绍了使用Hibernate进行注解式开发的方法,并且针对Hibernate的基本使用及其配置进行了详尽的解释。Hibernate作为一个流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java应用程序能够更加...
- **1.2.4 值类型的集合**:讨论如何在 Hibernate 中使用集合来表示复杂的数据结构,如 List 或 Set。 - **1.2.5 双向关联**:介绍如何建立和维护对象间的双向引用关系。 - **1.2.6 使双向连起来**:进一步说明如何...
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中引号包围...
6. **注解与XML的混合使用**:尽管Hibernate Annotations鼓励使用注解来简化映射配置,但开发者仍然可以在项目中灵活地结合使用注解和XML配置。当某些映射配置用注解难以表达时,仍然可以使用XML来完成。 7. **持久...
- **公式**:使用 `@Formula` 注解来定义计算属性。 - **类型**:使用 `@Type` 注解来指定自定义类型。 - **索引**:使用 `@Index` 注解来定义索引。 - **继承**:使用 `@Inheritance` 注解来定义继承策略。 - **...
- **从父类继承的属性**:在子类中使用 `@MapsId` 或 `@ManyToOne` 来映射继承的属性。 - **映射实体Bean的关联关系** - **一对一(One-to-one)**:使用 `@OneToOne` 注解来映射一对一的关系。 - **多对一(Many-...
例如:from Cat as cat,这个语句把别名 cat 指定给类 Cat 的实例,这样我们就可以在随后的查询中使用此别名了。 关键字 as 是可选的,我们也可以这样写:from Cat cat。子句中可以同时出现多个类,查询结果是产生...
- **公式**:使用`@Formula`注解执行SQL表达式。 - **类型**:自定义属性类型。 - **索引**:使用`@Index`注解指定索引。 - `@Parent`:表示实体所属的“容器”。 - **生成的属性**:使用`@Generated`注解自动...
5.1. 一个简单的POJO例子 5.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)...