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

hibernate学习之第十二篇

阅读更多

《三》混合使用“一个类继承体系一张表”和“每个子类一张表”
比如上面的例子,worker类可能属性很少,而farmer属性却很多,把两者都与person放在同一张表中,则显得表的 结构不是很合理,会有很多字段是null。所以我们可以把属性少的worker与person放在一张表中维护,而对farmer单独用一张表保存信息。

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" discriminator-value="0">
        <id name="id">
            <generator class="native"/>
        </id>
      
        <discriminator column="type" type="int"/>  
       
        <property name="name"/>
        <property name="age"/>
      
        <subclass name="Worker" discriminator-value="1">
            <property name="work_year"/>
        </subclass>

        <subclass name="Farmer" discriminator-value="2">  //鉴别器的默认值是类的名称,字符串类型
            <join table="farmer">
                <key column="person_id"/>
                <property name="farm_name"/>
            </join>
        </subclass>

    </class>
</hibernate-mapping>

执行以上代码,可能会出现问题,跟hibernate配置有关。我们在前面配置了:
  <property name="hibernate.hbm2ddl.auto">create</property>
在每次启动应用的时候,会先到数据库中删除相应的表。首先删除farmer表,它可以正确删除,然后根据配置文件(配置文件中表明只有这两张表)又要去删除person表。在我们前面写每个子类对应一张表时,生成了三张表,他们当时还在数据库中(名字前后一样)。也即是说第一次运行时,删的farmer表其实是上面产生的farmer表。由于根据要求要去删除person表,这时就会报错。因为worker表尚未删除,先删除person表,会引起外键关联错误。
所以可以手动把相关表删掉,再运行就可以通过了。
产生的sql语句如下:

Hibernate: insert into person (name, age, type) values (?, ?, 0)
Hibernate: insert into person (name, age, work_year, type) values (?, ?, ?, 1)
Hibernate: insert into person (name, age, type) values (?, ?, 2)
Hibernate: insert into farmer (farm_name, person_id) values (?, ?)
 


数据库中的表结构为:

person表:
+----+------+--------+------+---------------+
| id | type | name   | age  | work_year |
+----+------+--------+------+---------------+
|  1  |    0  | person |   22 |      NULL      |
|  2  |    1  | worker |   30 |       11         |
|  3  |    2  | farmer  |   31 |      NULL      |
+----+------+--------+------+-----------+
farmer表:
+-----------+------------------+
| person_id | farm_name    |
+-----------+-------------------+
|         3 | little candy          |
+-----------+-------------------+

分享到:
评论

相关推荐

    Hibernate中文学习资料

    Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)。第一级缓存默认开启,而第二级缓存则需要通过配置和插件实现,如EhCache或Infinispan。 10. **懒加载与即时加载** Hibernate...

    最经典的hibernate教程_从入门到精通_第二篇

    作为“从入门到精通”系列的第二篇,本教程将建立在第一篇的基础之上,进一步扩展对Hibernate的理解。 【描述】:“最经典的hibernate教程_从入门到精通_第二篇” 本教程旨在提供一个全面的Hibernate学习路径,让...

    Hibernate学习笔记

    12. **缓存机制**:深入理解Hibernate的缓存策略,包括一级缓存(Session级)和二级缓存(SessionFactory级),以及第三方缓存插件如Ehcache的集成。 13. **性能优化**:分享一些实用的Hibernate性能调优技巧,如...

    最经典的hibernate教程_从入门到精通_第四篇

    8. **缓存机制**:学习Hibernate的缓存策略,包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),以及第三方缓存集成,如EhCache和Redis。 9. **性能优化**:讨论如何优化Hibernate的性能...

    Hibernate-api Hibernate文档

    这篇文档旨在提供对Hibernate API的深入理解,帮助开发者更高效地使用Hibernate进行数据库操作。 一、Hibernate概述 Hibernate是Java开发中广泛使用的ORM框架,它提供了一种在Java应用中持久化数据到关系数据库的...

    hibernate 4.1 core API 英文版

    8. **第二级缓存**:除了默认的一级缓存(Session级别的缓存),Hibernate还支持二级缓存,用于存储多个Session共享的数据,提高性能。可以通过配置插件如EhCache实现。 9. **Transaction管理**:Hibernate提供了...

    Hibernate 用法实例

    本篇内容将通过丰富的实例来深入探讨Hibernate的核心概念和技术,帮助读者从入门到精通,掌握其所有主要用法。** ### 一、Hibernate 概述 Hibernate 提供了一种在Java应用程序中管理关系数据库模型的机制。它通过...

    来自Java Persistence With Hibernate的示例

    Hibernate提供了第一级缓存和第二级缓存。第一级缓存是每个Session内部的缓存,自动管理;第二级缓存是SessionFactory级别的,可以跨Session共享,提高性能。 十、性能优化 通过合理的配置和设计,Hibernate能提供...

    Hibernate帮助文档 3.1.1

    **正文** Hibernate是一款开源的对象关系映射(ORM)框架,它极大地简化了Java开发者与数据库之间的交互。...这份文档是Hibernate学习者和开发者的重要参考资料,对于深入理解ORM框架以及提升开发效率具有重要作用。

    hibernate中文帮助文档

    这篇中文帮助文档旨在为开发者提供详尽的指南,加速他们对Hibernate的理解和应用。 一、Hibernate概述 Hibernate是一个强大的工具,它消除了Java应用程序与SQL之间的直接耦合,使得开发人员可以更专注于业务逻辑,...

    Hibernate API帮助文档

    这篇文档将深入探讨Hibernate API的各个方面,帮助开发者更好地理解和使用它。 一、Hibernate体系结构 Hibernate主要由以下组件构成: 1. Configuration:负责读取配置文件,建立SessionFactory。 2. ...

    Hibernate基础全攻略

    本篇攻略将深入探讨Hibernate的基础知识,帮助初学者理解并掌握其核心概念。 1. ** Hibernate简介** Hibernate是一个开源的ORM框架,它允许开发人员在Java应用中使用面向对象的方式来处理数据库。通过提供对象与...

    hibernate文档

    6. **缓存机制** - Hibernate 提供了第一级缓存(Session 缓存)和第二级缓存,提高性能并减少数据库负载。还可以集成第三方缓存服务,如 Ehcache 或 Redis。 7. **事务管理** - Hibernate 支持 JTA 和 JDBC 事务...

    hibernate笔记

    二级缓存是SessionFactory级别的,可配置第三方缓存提供商如Ehcache,以提高性能。 8. **懒加载与立即加载**:懒加载是一种优化策略,仅在需要时才加载关联的对象,减少不必要的数据库访问。而立即加载则是在获取主...

    Hibernate入门(上)笔记.pdf.zip

    十、第一级缓存与第二级缓存 第一级缓存是Session级别的,每次操作的对象都会被放入缓存,提高读写速度。第二级缓存是SessionFactory级别的,可以跨Session共享,通常用于缓存不经常改变的数据。 以上是对...

    Hibernate 中文API 入门和开发的好帮手

    这篇文档是Hibernate的中文API,为学习和使用Hibernate提供了一个直观且易于理解的参考。 一、Hibernate概述 Hibernate是Java领域中广泛使用的ORM框架,它将数据库的操作转换为对Java对象的操作,通过配置文件和...

    hibernate相关知识

    10. **缓存机制**:Hibernate有第一级缓存(Session级别)和第二级缓存(SessionFactory级别),还支持第三方缓存解决方案如 Ehcache 和 Infinispan。 11. **Hibernate的延时加载(Lazy Loading)**:默认情况下,...

    Spring.Struts.Hibernate开发应用

    在"第十一章.开发Spring.Struts.Hibernate应用.pdf"这个文件中,可能详细介绍了如何配置和整合这三个框架,包括Spring的bean配置、Struts的action配置、Hibernate的实体映射和数据源设置等。此外,可能还会讲解如何...

    java web技术开发大全(最全最新)

    第12章 文件的上传和下载 第13章 国际化 第14章 Struts 2的标签库 第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置...

Global site tag (gtag.js) - Google Analytics