`
jianchen
  • 浏览: 340625 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate学习之第十二篇(续)

阅读更多

《四》每个具体类映射一张独立的表(union-subclass),即表与子类之间的独立一对一关系
所有的子类的表中的信息都是完整的,不需要对表进行关联了。

person.hbm.xml的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate.extend" auto-import="false">
    <class name="Person" table="person">
        <id name="id">
            <generator class="hilo"/>
        </id>
  
        <property name="name"/>
        <property name="age"/>
        <union-subclass name="Worker" table="worker">
            <property name="work_year"/>
        </union-subclass>
        <union-subclass name="Farmer" table="farmer">
            <property name="farm_name"/>
        </union-subclass>
    </class>
</hibernate-mapping>

 

产生的sql语句为:

写道
Hibernate: insert into person (name, age, id) values (?, ?, ?)
Hibernate: insert into worker (name, age, work_year, id) values (?, ?, ?, ?)
Hibernate: insert into farmer (name, age, farm_name, id) values (?, ?, ?, ?)
Hibernate: select person0_.id as id8_0_, person0_.name as name8_0_, person0_.age as age8_0_, person0_.work_year as work1_9_0_, person0_.farm_name as farm1_10_0_, person0_.clazz_ as clazz_0_ from ( select null as work_year, id, age, name, null as farm_name, 0 as clazz_ from person union select work_year, id, age, name, null as farm_name, 1 as clazz_ from worker union select null as work_year, id, age, name, farm_name, 2 as clazz_ from farmer ) person0_ where person0_.id=?
 

执行后,数据库中表结构为:
person表:
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | person |   22 |
+----+--------+------+
worker表:
+----+--------+------+----------------+
| id  | name   | age  | work_year |
+----+--------+------+----------------+
|  2  | worker |   30 |        11        |
+----+--------+------+----------------+
farmer表:
+----+--------+------+--------------+
| id | name   | age  | farm_name|
+----+--------+------+--------------+
|  3 | farmer |   31 | little candy |
+----+--------+------+--------------+
注意:注意到我们把主键生成器改为使用高低键生成器了。因为native会根据使用的数据库自动选择相应的主键生成方式,由于我使用的是mysql数据库,对主键字段是自动增长的。也就是说在三个表中会有相同的主键id。这样在查询时就会出现问题。当你查一个id为1的person时,他会从三张表中都获得结果,这显然不行。所以这里改用高低键hilo生成方式,就不会出现这种问题。从上面的表中的数据也可以看出来。三个表的id是互不相同的。这种设计更符合实际需求。
补充:
同时,有时候父类是抽象类,这样就不需要在数据库中产生表了。这只需要加一个属性配置一下即可:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate.extend" auto-import="false" abstract="true" >
    <class name="Person" table="person">
        <id name="id">
            <generator class="hilo" />
        </id>
  
        <property name="name"/>
        <property name="age"/>
        <union-subclass name="Worker" table="worker">
            <property name="work_year"/>
        </union-subclass>
        <union-subclass name="Farmer" table="farmer">
            <property name="farm_name"/>
        </union-subclass>

    </class>
</hibernate-mapping>

分享到:
评论

相关推荐

    hibernate学习资料大全

    Hibernate 提供了第一级缓存和第二级缓存,以及查询缓存,能够提高数据访问速度。学习如何配置和使用缓存,可以有效提升应用性能。 9. **延迟加载和懒加载**: 延迟加载(Lazy Loading)是Hibernate的一项重要...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    hibernate学习

    本人精心搜集了学习hibernate的资料,一些是我以前学习用的,一些是新搜集的 资料。 &lt;br&gt;搜集清单和说明 1:hibernate学习源码,这是我以前做练习的代码,希望对感兴趣的朋友 有些帮助。 2:...

    Hibernate学习.pdf

    - **Ehcache.jar:** 第三方缓存组件,用于实现Hibernate的一级缓存和二级缓存。 - **Hibernate3.jar:** Hibernate核心库,包含所有主要的Hibernate功能。 - **Jta.jar:** Java Transaction API,用于处理事务。 - **...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate学习文档集合

    《Hibernate学习文档集合》 Hibernate,作为Java领域中的一款强大且广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。本集合包含了三个关键的学习文档,分别关注于Hibernate的操作基础、对象关系映射和...

    Hibernate 中文api 等学习资料

    标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hibernate学习资料大合集

    **hibernate学习资料大合集** 本资料合集涵盖了关于Hibernate的各种学习资源,包括PDF、CHM和Word文档,旨在帮助开发者深入理解和掌握Hibernate这一强大的Java持久化框架。Hibernate作为一个对象关系映射(ORM)...

    非常好的Hibernate学习资料

    6. **缓存机制**:Hibernate内置了第一级缓存和第二级缓存,可以提高数据访问性能。理解何时启用缓存以及如何管理缓存,对于优化应用程序性能很有帮助。 7. **事务管理**:Hibernate支持JTA和JDBC两种事务管理方式...

    hibernate基础学习资料

    Java框架中关于hibernate的基础学习

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    北大青鸟Hibernate学习资料

    【北大青鸟Hibernate学习资料】 Hibernate是一个开源的Java ORM(对象关系映射)框架,它为开发者提供了在Java应用中管理关系数据库数据的便捷方式。本学习资料集合了多个关于Hibernate的重要主题,包括对象关系...

    hibernate学习心得

    随着对 Hibernate 的深入学习,你将了解缓存机制、第二级缓存、查询优化、关联映射等高级特性。这将帮助你在实际项目中更好地利用 Hibernate,提高性能并降低复杂性。 总之,学习 Hibernate 从配置数据库连接开始,...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    Hibernate学习资料(java)

    Hibernate一对一数据关联 Hibernate下的多对多关系 Hibernate关系映射 Hibernate继承关系映射 Hibernate映射类型-主键生成器-核心API Hibernate3 插件Eclipse配置

    Hibernate DOC中文文档(学习Hibernate必备手册)

    6. **缓存机制**:介绍第一级缓存和第二级缓存的工作原理,以及如何配置和使用缓存来提高应用性能。 7. **实体生命周期**:阐述实体的持久化状态(瞬时、持久、托管和脱管),以及它们之间的转换过程,如保存、更新...

    hibernate学习笔记第四天的源码

    **hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...

Global site tag (gtag.js) - Google Analytics