知识大全 精通Hibernate之映射继承关系七(图)

Posted

篇首语:著论准过秦,作赋拟子虚。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 精通Hibernate之映射继承关系七(图)相关的知识,希望对你有一定的参考价值。

精通Hibernate之映射继承关系七(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Company与Employee类之间为一对多多态关联关系 如果继承关系树的根类对应一个表 或者每个类对应一个表 那么就能映射Company类的employees集合 本节介绍如何映射多对一多态关联 如图 所示 ClassD与ClassA为多对一多态关联关系    >   >    ClassA ClassB和ClassC构成了一棵继承关系树 如果继承关系树的根类对应一个表 或者每个类对应一个表 那么可以按以下方式映射ClassD的a属性     <many to one name= a   class= ClassA   column= A_ID   cascade= save update />    假定与ClassD对应的表为TABLE_D 与ClassA对应的表为TABLE_A 在TABLE_D中定义了外键A_ID 它参照TABLE_A表的主键     ClassD对象的a属性既可以引用ClassB对象 也可以引用ClassC对象 例如     tx = session beginTransaction();  ClassD d=(ClassD)session get( ClassD id);  ClassA a=d getA();  if(a instanceof ClassB)  System out println(((ClassB)a) getB ());  if(a instanceof ClassC)  System out println(((ClassC)a) getC ());  mit();    以下代码在映射ClassD类的a属性时使用了延迟检索策略     <many to one name= a   class= ClassA   column= A_ID   lazy= true   cascade= save update />    当Hibernate加载ClassD对象时 它的属性a引用ClassA的代理类实例 在这种情况下 如果对ClassA的代理类实例进行类型转换 会抛出ClassCastException     ClassA a=d getA();  ClassB b=(ClassB)a; //抛出ClassCastException    解决以上问题的一种办法是使用Session load()方法     ClassA a=d getA();  ClassB b=(ClassB)session load(ClassB class a getId());  System out println(b getB ());    当执行Session的load()方法时 Hibernate并不会访问数据库 而是仅仅返回ClassB的代理类实例 这种解决办法的前提条件是必须事先知道ClassD对象实际上和ClassA的哪个子类的对象关联     解决以上问题的另一种办法是显式使用迫切左外连接检索策略 避免Hibernate创建ClassA的代理类实例 而是直接创建ClassA的子类的实例     tx = session beginTransaction();  ClassD d=(ClassD)session createCriteria(ClassD class)   add(Expression eq( id id))   setFetchMode( a FetchMode EAGER)   uniqueResult();  ClassA a=d getA();  if(a instanceof ClassB)  System out println(((ClassB)a) getB ());  if(a instanceof ClassC)  System out println(((ClassC)a) getC ());  mit();    如果继承关系树的具体类对应一个表 为了表达ClassD与ClassA的多态关联 需要在TABLE_D中定义两个字段 A_ID和A_TYPE A_TYPE字段表示子类的类型 A_ID参照在子类对应的表中的主键 图 显示了表TABLE_D TABLE_B和TABLE_C的结构    >   > cha138/Article/program/Java/ky/201311/28679

相关参考

知识大全 精通Hibernate之映射继承关系四(图)

精通Hibernate之映射继承关系四(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这种

知识大全 精通Hibernate之映射继承关系八

精通Hibernate之映射继承关系八  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于关系数

知识大全 精通Hibernate之映射继承关系(二)

精通Hibernate之映射继承关系(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  把每个

知识大全 精通Hibernate之映射继承关系(一)

精通Hibernate之映射继承关系(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在域模

知识大全 精通Hibernate之映射继承关系三

精通Hibernate之映射继承关系三  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  <h

知识大全 hibernate关系映射

  一对象关系映射基础  对象间的基本关系  首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系  关联关系关联关系在设计模式中是被提倡优先使用于继承关系的

知识大全 Hibernate各种映射关系总结

Hibernate各种映射关系总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多对一  第一

知识大全 Hibernate ORM 对象-关系 映射

HibernateORM对象-关系映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hiber

知识大全 映射对象标识符

精通Hibernate:映射对象标识符  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java语

知识大全 Hibernate的继承关系

Hibernate的继承关系  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一每个子类对应一个数据表