- 浏览: 7189222 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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_person2表 :
1 int id //主键
2 varchar name //父类中的姓名
3 int age //父类中的年龄
t_men2表:
1 int person_id //主键,外键
2 varchar a //Men类扩展的属性a
t_women2表:
1 int person_id //主键,外键
2 varchar b //Women类扩展的属性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_2" auto-import="false"> <class name="Person" table="t_person2" discriminator-value="0"><!-- "鉴别值"为0 --> <!-- 父类的属性 --> <id name="id"> <generator class="native"/> </id> <!-- 父类的属性 --> <property name="name"/> <!-- 父类的属性 --> <property name="age"/> <!-- Mem子类的映射 --> <joined-subclass name="Men" table="t_men2"><!-- table="t_men2"是表名 --> <!-- 外键的字段名--> <key column="person_id"></key> <!-- Men类专有的属性a --> <property name="a"/> </joined-subclass> <!-- Women子类的映射 --> <joined-subclass name="Women" table="t_women2"><!-- table="t_men2"是表名 --> <!-- 外键的字段名--> <key column="person_id"></key> <!-- Men类专有的属性a --> <property name="b"/> </joined-subclass> </class> </hibernate-mapping>
保存与查询操作:
package extends_test.extends_2; 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_person2 (name, age) values (?, ?) //Hibernate: insert into t_person2 (name, age) values (?, ?) //Hibernate: insert into t_men2 (a, person_id) values (?, ?) //Hibernate: insert into t_person2 (name, age) values (?, ?) //Hibernate: insert into t_women2 (b, person_id) values (?, ?) //Hibernate: select person0_.id as id9_0_, person0_.name as name9_0_, person0_.age as age9_0_, person0_1_.a as a10_0_, person0_2_.b as b11_0_, case when person0_1_.person_id is not null then 1 when person0_2_.person_id is not null then 2 when person0_.id is not null then 0 end as clazz_0_ from t_person2 person0_ left outer join t_men2 person0_1_ on person0_.id=person0_1_.person_id left outer join t_women2 person0_2_ on person0_.id=person0_2_.person_id where person0_.id=? //class extends_test.extends_2.Men } finally { if (session != null) { session.close(); } } } }
- My-Hibnate.rar (41.2 KB)
- 下载次数: 36
发表评论
-
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)继承"人& ... -
14 继承(一)(整个继承树映射到一张表)
2009-03-02 11:00 2225人类(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 ...
相关推荐
3. 第三种方式将基类作为一张表进行存储,每个子类特性的属性都新建一张表进行保存,然后在基类对应的表里面通过一个字段来区分对象的类型。这种方式在数据表结构上区分得更加清晰,减少了数据冗余,同时也易于管理...
每个子类对应一个单独的数据库表,基类的信息则共享一个公共的表。这种策略可以避免单表继承中的空字段问题,但可能会导致更多的JOIN操作,影响性能。 3. Concrete Table Inheritance(具体类继承): 每个类...
在联合表继承中,每个子类都有自己的独立表,同时还有一个公共的父类表。使用`@Inheritance(strategy = InheritanceType.JOINED)`来声明此策略。子类属性被存储在其各自的表中,而共享的属性则在父类表中。子类与...
传统的VB6子类化通常会在一个单独的标准模块中为所有子类化的对象定义`WndProc`函数,然后在每个子类中调用它,而PctGL的方法消除了这种需求。 `TestSubClass.vbp`是VB6工程文件,包含了项目的基本信息和引用。`...
1) **Subclass映射**:这是最简单的一种方式,每个子类都映射到一个单独的表。这种方式下,Hibernate不会在数据库中体现继承关系,而是为每个类创建一个独立的表。这种方式适用于子类有很多特定的属性,而父类属性较...
每个子类都有自己的数据库表,而父类的共享属性则存储在一个公共的表中。子类的表通过外键关联到父类的表。父类使用`@Inheritance(strategy = InheritanceType.JOINED)`注解,而子类则没有特定的注解。 3. **表...
2. **类表继承(Class Table Inheritance)**:每个子类对应一个单独的表,父类的信息则被包含在每个子类表中。 3. **表泛型(Table per Concrete Class)**:每个具体类对应一个表,不存储抽象类信息,只存储其实例...
然后,我们为每个特定形状(球体、圆柱体和圆锥体)创建单独的类,这些类继承自`几何体`类,并覆盖或扩展基类的方法以实现各自特有计算规则。 对于球体,我们知道它的表面积公式是4πr²,体积公式是(4/3)πr³。在...
- **每个具体子类映射成单个数据库表(不包括抽象基类)**:每个具体类(如 `Student` 和 `Professor`)都有自己的表,而抽象基类 `Person` 不映射。这种方式的优点在于报表操作简单,因为所有信息都在单独的表中。...
联合继承则是为每个子类创建单独的表,同时有一个共享的主表来存储共有的属性。这种方式适用于子类较多,且需要独立管理各个子类的情况。 表-per-hierarchy策略将所有子类的属性都存储在一个表中,通过一个额外的...
- **表继承策略**:为超类和每个子类创建单独的表,超类表中的主键作为所有子类表的外键。 - **映射关联关系**:根据关联关系的类型(一对一、一对多、多对多),确定关联表的结构和外键的位置。 - **一对一**:...
4. **易于测试**:子类化可以使测试更加有针对性,我们可以为每个子类编写独立的测试用例。 在实际开发中,我们经常遇到需要多个Activity共享某些功能的情况。这时,可以创建一个基类,将这些共通的代码抽象到基类...
前者为每个子类创建一个单独的表,后者则将所有子类的属性都包含在一个公共表中,而子类特有的属性会存储在附加的表中。`TablePerSubclassTest.java`可能包含了对这两种情况的示例,我们将看到如何使用@Inheritance...
联合继承策略为每个继承类创建一个单独的表,主类的信息存储在主表中,子类的特有属性存储在各自的子表中,通过外键关联。这种方式适合于类层级复杂、子类属性差异大的场景。 现在,我们开始创建一个简单的...
Java中的继承是面向对象编程的重要特性,它允许子类继承父类的属性和方法,从而实现代码的复用和类的扩展。在本课程中,我们深入探讨了继承的几个关键概念。 首先,继承的概述指出,当多个类具有相似的属性和行为时...
1. **整个层次结构映射到一张表**:这种方法适用于层次结构简单且每个子类的属性变化较小的情况。所有类的数据都存储在同一张表中,通过一个额外的字段标识不同类的实例。 2. **每个具体类映射到单独的一张表**:...
2. **类表继承(Class Table Inheritance, CTI)**:每个子类都有自己的独立表,父类信息在每个子类表中重复。这样可以避免表结构过于复杂,但增加了数据冗余。 在BAMS项目中,可能是通过某种方式实现了继承关系,...
1. 泛化关系:泛化关系在UML中通常表现为类的继承,即一个子类继承自一个或多个父类。在数据库设计中,有两种常见的映射方式: - 方法1:将每个类(包括父类和子类)都映射为单独的表。这种方式允许灵活地独立修改...
如果子类仅继承父类属性而无额外属性,则通常无需创建新表,而是在父类表中增加类型区分字段。 3. **原则三:处理一对多关联**。通过在“多”的一方的表中增加“一”的一方表的主键作为外键,来表示两者之间的关联...