`
oldman
  • 浏览: 20771 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

hibernate映射文件的formula简单使用

    博客分类:
  • java
阅读更多

以前没有用过formula,今天试了试,

还是用学生和书本这个one-to-many关系来说明吧:

Students.hbm.xml:

<hibernate-mapping>
  <class table="T_Students" name="com.hewill.model.Students">
    <id type="java.lang.String" column="id" length="32" name="id">
      <generator class="uuid.hex"/>
    </id>
    <property name="bookCount" formula="(select count(*) from T_Books )"/>
    <property name="name" type="java.lang.String" column="name"/>
    <property name="sex" type="java.lang.String" column="sex"/>
    <property name="number" type="java.lang.String" column="number"/>
    <set inverse="true" cascade="all" name="books">
      <key column="student_id"/>
      <one-to-many class="com.hewill.model.Books"/>
    </set>
  </class>
</hibernate-mapping>

 

Books.hbm.xml:

<hibernate-mapping>
  <class table="T_Books" name="com.hewill.model.Books">
    <id type="java.lang.String" column="id" length="32" name="id">
      <generator class="uuid.hex"/>
    </id>
    <property name="bookname" type="java.lang.String" column="bookname"/>
    <many-to-one column="student_id" name="studentid" class="com.hewill.model.Students"/>
  </class>
</hibernate-mapping>

  

测试代码:

public static void main(String[] args) {
		SessionFactory sf = new Configuration().configure().buildSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		
		Query query = session.createQuery("from Students where name='liu'");
		List<Students> list = query.list();

		for(Students students : list){
			System.out.println("name : "+students.getName());
			System.out.println("number : "+students.getNumber());
			System.out.println("bookCount : "+students.getBookCount());
		}

		tx.commit();
		session.close();

}

 

结果:

Hibernate: 
    select
        students0_.id as id0_,
        students0_.name as name0_,
        students0_.sex as sex0_,
        students0_.number as number0_,
        (select
            count(*) 
        from
            T_Books ) as formula0_ 
    from
        T_Students students0_ 
    where
        students0_.name='liu'
name : liu
number : 006
bookCount : 2

 

从hibernate执行的语句中,我们可以看到Students的bookCount属性是formula通过执行指定的“select count(*) from T_Books ”来获得的。bookCount字段在数据库T_Students表中是没有的,它是一个虚拟列。像这样,当我们需要用数据库来完成一些计算,并想获得这个计算结果时,完全可以用formula.

formula的使用注意事项网上很多,就不在提了。

1
0
分享到:
评论

相关推荐

    hibernate映射配置文件不支持union联合查询[参照].pdf

    在软件开发领域,尤其是...总的来说,当遇到类似问题时,开发者需要仔细检查SQL语句的语法和结构,同时评估是否可以通过调整查询策略、优化数据模型或利用其他工具来避免直接在Hibernate映射文件中使用复杂的子查询。

    详解Hibernate一对一映射配置

    在Java持久化框架Hibernate中,一对一(One-to-One)映射是对象关系映射的一种常见方式,用于表示两个实体之间一对一的关系。这种关系通常出现在一个实体的实例只能与另一个实体的单个实例相关联的情况。下面我们将...

    hibernate中文帮助文档

    2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...

    hibernate_annotations(中文API,高清)

    Hibernate利用这种技术来简化和减少XML映射文件的使用,将映射信息直接写在Java类的注解中。 Hibernate Annotations是Hibernate框架的一部分,它提供了一套注解,用于实现ORM映射。通过使用注解,开发者可以在不...

    @Formula的作用和使用

    在Java实体类中使用`@Formula`注解,通常会结合JPA或Hibernate等ORM框架。下面通过一个具体的例子来说明如何使用`@Formula`: ```java @Entity public class News { private int id; private String title; ...

    hibernate教程

    - **映射简单属性**: - 基本的属性映射:使用`@Column`注解来指定列名等信息。 - 映射列属性:可以通过`@Column`注解的参数如`name`、`nullable`、`length`等来更详细地定义列。 - **嵌入式对象**:对于复杂的...

    hibernate_-annotations_中文帮助文档

    《Hibernate Annotations 中文帮助文档》提供了关于如何在Java应用程序中使用Hibernate ORM框架进行数据库映射的详细指南。Hibernate Annotations是Hibernate框架的一部分,它允许开发者使用Java注解来定义对象关系...

    Hibernate 中文 html 帮助文档

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    最全Hibernate 参考文档

    9.1.7. 隐式多态和其他继承映射混合使用 9.2. 限制 10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating ...

    Hibernate+中文文档

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    hibernate annotation 中文文档

    - **2.2.2.4 无注解之属性的默认值**:如果未使用注解,Hibernate 会按照默认规则进行映射。 - **2.2.3 映射主键属性** - 主键属性的映射可以通过 `@Id` 注解来完成,该注解还可以与 `@GeneratedValue` 配合使用以...

    hibernate_annotation_中文帮助文档

    《Hibernate Annotations中文帮助文档》是针对Java开发人员的一份详细指南,主要讲解如何使用Hibernate ORM框架中的注解来实现数据库对象的映射。该文档涵盖了从基础到高级的各种概念,帮助开发者更高效地管理和操作...

    hibernate annotations 中文参考手册

    除了通过注解配置实体映射之外,还可以使用 XML 文件或者基于 Java 的配置方式来定制更复杂的映射规则。 #### 总结 通过使用 Hibernate Annotations,开发者能够以一种更为简洁和灵活的方式定义对象关系映射规则。...

    hibernate3.2中文文档(chm格式)

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    HibernateAPI中文版.chm

    1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 ...

    hibernate annotation帮助文档

    - **无注解之属性的默认值**:如果没有使用注解,Hibernate 会按照默认规则来处理属性的映射。 - **映射主键属性** - 使用 `@Id` 注解来标识主键属性。 - 可以使用 `@GeneratedValue` 来指定主键生成策略,如...

    hibernate 学习总结.doc

    - Hibernate允许在`&lt;property&gt;`标签中通过`insert="false"`来控制是否插入某个字段,或者使用`formula`属性指定SQL表达式,如子查询,以处理数据库中没有直接映射的属性。 4. Hibernate API接口: - **访问数据库...

    hibernate_reference中文文档.pdf

    - **5.1.22 字段和规则元素 (column and formula elements)**:描述字段和公式元素的使用方法。 - **5.1.23 引用 (import)**:说明如何导入外部实体类。 - **5.1.24 Any**:解释 any 元素的使用场景。 #### 6. ...

    hibernate-annotations_中文帮助文档

    - **公式**:使用 `@Formula` 注解来定义计算属性。 - **类型**:使用 `@Type` 注解来指定自定义类型。 - **索引**:使用 `@Index` 注解来定义索引。 - **继承**:使用 `@Inheritance` 注解来定义继承策略。 - **...

    hibernate 中文注解

    - **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射主键属性:** 主键映射通过`@Id`注解实现。 - **映射继承关系:** - **每个类一张表:** 每个子类对应...

Global site tag (gtag.js) - Google Analytics