- 浏览: 7189221 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
人类(Person) , 男人(Men)继承"人"类, 女人(Women)继承"人"类, UML如下:
映射到如下的t_person表中 , 有以下6个字段:
1 int id //主键
2 varchar name //父类中的姓名
3 int age //父类中的年龄
4 int/varchar type //区分"人","男人","女人" 的专用字段, 默认类型是varchar, 也可以指定为int类型. 叫鉴别器字段
//Person类:type值设为0, Men类: type值设为1, Women 类: type值设为2
5 varchar a //"男人"类专有属性
6 varchar b //"女人"类专有属性
Person, Men, Women 三个类这里就不显示了,但简单, 想看了附件中有源码
Person.hbm.xml 如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="extends_test.extends_1" auto-import="false"> <class name="Person" table="t_person" discriminator-value="0"><!-- "鉴别值"为0 --> <!-- 父类的属性 --> <id name="id"> <generator class="native"/> </id> <!-- 重点:鉴别器 --> <!-- 指定type字段,做区分父子具体类型用 ,各类还要指定"鉴别值": discriminator-value="1"--> <discriminator column="type" type="int"/> <!-- 父类的属性 --> <property name="name"/> <!-- 父类的属性 --> <property name="age"/> <!-- Mem子类的映射 --> <subclass name="Men" discriminator-value="1"><!-- "鉴别值"为1 --> <!-- Men类专有的属性a --> <property name="a"/> </subclass> <!-- Women子类的映射 --> <subclass name="Women" discriminator-value="2"><!-- "鉴别值"为2 --> <!-- Women类专有的属性b --> <property name="b"/> </subclass> </class> </hibernate-mapping>
保存与查询操作:
package extends_test.extends_1; import org.hibernate.Session; import org.hibernate.Transaction; import dao.HibernateUtil; /** * 继承关系的映射(方法一) * * 总个继承树映射到一张表 * */ public class Test { /** * @param args */ public static void main(final String[] args) { //add(); query(); } /** * 查询测试 */ public static void query() { Session session = null; try { session = HibernateUtil.getSeesion(); final Person p = (Person) session.get(Person.class, 2); //ID为2的记录是 Men类型 System.out.println(p.getClass()); //get()第一个参数用了 Person.class //能识别出是class extends_test.extends_1.Men类型 } finally { if (session != null) { session.close(); } } } /** * 添加测试 */ public static void add() { final Person p1 = new Person(); p1.setName("我是Person类"); final Men m1 = new Men(); m1.setName("我是男人类"); m1.setA("a"); final Women w1 = new Women(); w1.setName("我是女人类"); w1.setB("b"); Session session = null; try { session = HibernateUtil.getSeesion(); final Transaction tx = session.beginTransaction(); session.save(p1); session.save(m1); session.save(w1); tx.commit(); //SQL如下 //Hibernate: insert into t_person (name, age, type) values (?, ?, 0) //Hibernate: insert into t_person (name, age, a, type) values (?, ?, ?, 1) //Hibernate: insert into t_person (name, age, b, type) values (?, ?, ?, 2) } finally { if (session != null) { session.close(); } } } }
评论
3 楼
grossofans
2010-11-15
jhp_sjyy 写道
数据库中是不是需要三张表啊 ?
hbm配置文件 就一个父类的吗?
hbm配置文件 就一个父类的吗?
应该是一张表吧!!!
2 楼
jhp_sjyy
2009-06-12
问题解决了
1 楼
jhp_sjyy
2009-06-12
数据库中是不是需要三张表啊 ?
hbm配置文件 就一个父类的吗?
hbm配置文件 就一个父类的吗?
发表评论
-
Hibernate二级缓存 ---- 最佳实践
2010-11-08 10:17 39285作者:赵磊 博客:ht ... -
Hibernate--泛型DAO
2010-06-27 19:49 5052泛型DAO(翻译) http://www.iteye.com ... -
Hibernate--空位
2010-06-27 15:41 1796原文章已合并整理到: http://elf8848.itey ... -
Hibernate二级缓存 ---- 入门示例
2010-06-27 15:34 4149一. 我们使用oscache来演示 , 引入oscache的j ... -
Hibernate 操作Blob Clob
2010-06-14 16:50 5250Photo.java import java.sql.Bl ... -
Hibernate ---- 控制日志
2010-06-06 11:46 3043Hibernate版本 3.3或3.4 Hibernate ... -
Hibernate悲观锁定与乐观锁定
2010-05-17 15:08 2241悲观锁定 由数据库方面实现. 可见:Hibernate悲观锁 ... -
Hibernate懒加载深入分析
2010-05-14 11:22 8282[size=small] ------------------ ... -
Hibernate批量操作(JDBC批量操作)
2009-03-30 14:52 8401部分内容转自 :http://ga ... -
Hibernate分页查询与泛型
2009-03-26 19:03 7358JE有两篇文章,关于分页查询 与泛型 的,写的很好.这里收藏一 ... -
20 Hibernate 1+N问题的原理与解决
2009-03-04 09:44 13075什么时候会遇到1+N的问题? 前提:Hibernate默认表 ... -
19 Criteria查询,DetachedCriteria离线查询 --做综合查询
2009-03-04 09:35 3732通过Session得到Criteria类的对象 /** ... -
空位空位
2009-03-03 10:22 2333空位空位空位空位 -
17 继承(四)每一个具体的类 映射到一张表
2009-03-02 13:54 2297类(Person) , 男人(Men)继 ... -
16 继承(三)(把前面14,15讲的情况结合起来)
2009-03-02 13:30 2091人类(Person) , 男人(Men)继承"人& ... -
15 继承(二)(每个子类扩展的属性单独保存在一张表中)
2009-03-02 13:07 2068人类(Person) , 男人(Men)继承" ... -
13 级联和关系维护(Cascade 和Inverse)
2009-03-01 17:58 3039Cascade用来说明当对主对象进行某操作时, 是否对其关联的 ... -
12 映射-- 集合类的映射(Set,List,Map,Array)
2009-03-01 16:18 2621部门类Department , 他有 empa1, emp ... -
11 映射-- 组件映射(人类与姓名类)
2009-03-01 15:26 2360User类: 注意他的name属性 package ... -
10 映射-- 多对多(老师与学生)
2009-03-01 15:01 2576学生类: package dao.po; impo ...
相关推荐
标题中的“17 继承(四)每一个具体的类 映射到一张表”指出,我们将关注的是类继承在Hibernate中的映射策略。在传统的面向对象编程中,继承允许我们创建一个新类(子类)并继承父类的属性和方法,以此实现代码复用和...
本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承策略。 ### 单一表继承策略 在单一表继承策略中,所有类层次结构中的实例都存储在同一张数据库表中。这种策略通过在表中...
总结来说,“每个子类一张表”的继承映射策略是Hibernate提供的一种处理继承关系的方法,它将类的继承结构映射到数据库的多个表中。这种策略适合于子类具有大量特有属性的情况,但需要权衡可能带来的数据库设计复杂...
总结起来,"每个类都对应一张表"的继承映射策略在Hibernate中是一种直接且易于理解的方法,适合那些每个类都有独特属性的情况。然而,它可能不适合所有场景,特别是当子类众多或者需要减少数据冗余时。在实际应用中...
本篇文章主要探讨的是Hibernate的继承映射策略,特别是“每个类分层结构一张表”(Table per Concrete Class)的方式。这种映射策略是Hibernate提供的多种继承映射方案之一,适用于处理复杂的对象模型。 首先,我们...
Hibernate通过多种继承映射策略解决了这一问题,其中“每个具体类一张表”是最为直观的一种。这种方式适用于子类较多,且子类之间差异较大的场景。 1. **基本概念** - **实体类**:在Hibernate中,被映射到数据库...
本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...
本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...
单表映射策略将继承树中的所有类映射到同一张表中,通过一个额外的“识别字段”(通常称为`discriminator`)来区分不同类型的子类记录。 #### 示例代码 ```xml <!-- 其他属性映射省略 --> <!-- Notepad...
在这种策略下,继承树的根类(如Employee)对应数据库中的一张表,而具体类的信息则通过添加一个类型区分字段来存储。这种方式需要在根类对应的表中增加一个字段来标识具体类的类型,通常命名为class或者subclass,...
本教程以“Hibernate-lab2”为例,将深入探讨Hibernate中的继承映射,为初学者提供一个清晰的学习路径。 一、Hibernate继承映射概述 Hibernate继承映射是将Java中的继承关系映射到数据库的关系模型中。在Java中,...
1. **单表继承(Single Table Inheritance)**:所有子类共享同一张数据库表,使用一个标识字段来区分不同的子类实例。优点是简单,但可能导致冗余数据。 2. **表格_per_class继承(Table per Class Inheritance)*...
3. **每个类单独映射到一张表**:这是一种更为灵活的策略,允许每个类(包括抽象类和具体类)都有自己的表。这种方法能够更好地处理继承层次结构中的复杂性。 4. **将类映射为一个通用的表结构**:这种方法旨在提供...
Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表
这种策略将整个类继承树的所有实例存储在一张表中。表中包含所有子类的属性,通过一个鉴别器(discriminator)字段来区分不同类型的对象。例如,对于接口Payment和它的实现类CreditCardPayment、CashPayment、...
在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和结构化设计的重要手段,而在关系型数据库中,由于其...