`

joined-subclass

 
阅读更多

考虑这样一个继承关系mammal与cat,dog。对应的类如下

public class Mammal {
    private int id;
    private String name;
}

public class Cat extends Mammal {
    private String kind;
    private int scratchLevel;
}

public class Dog extends Mammal {
    private String variety;
    private int biteLevel;
}

由于我们采用不同的table来存储相应的类数据,所以在设计上要选择较比巧妙的方法,即在cat与dog对应的table中采用主键映射的方法。我们将mammal对应的table中的id作为cat与dog的外键,并且在cat与dog对应的table中只存储以下的字段信息:

create table cat(
   cat_id int primary key not null,
   kind varchar(10) not null,
   scratchlevel int not null
);

create table dog(
   dog_id int primary key not null,
   variety varchar(15) not null,
   bitelevel int not null
);

发现了没?cat与dog从mammal中继承的name域在table中没有相应的字段来存储。由于采用了外键的映射,我们将id与name存入mammal的table中,这样可以节省存储空间,并且很容易进行查找。

那么,外键对应的hibernate描述符如何写呢?我们选用joined-subclass来实现。cat相应的描述如下

<joined-subclass name= "inheritedmapping2.Cat" table= "CAT" >
      <key column= "CAT_ID" />
      <property name= "kind" type= "string" column= "KIND" />
      <property name= "scratchLevel" type= "int" column= "SCRATCHLEVEL" />
</joined-subclass>

该片断在Mammal.hbm.xml中。其实除了joined-subclass这个描述字符串以外,其他的都同一般的描述符的一样。通过 key,我们将cat table的id与mammal table的id相联系,这样就实现了cat的两个table分开存储。dog中的映射片断与cat相似,改改table与property的值就好了。

查询时,同上一篇一样

List cats = session.find( "from Cat" );

将选出数据库中全部的cat对象, "from Mammal"将选出所有的对象。

分享到:
评论

相关推荐

    Hibernate映射继承关系的三种方案.docx

    本文将详细探讨Hibernate中处理继承关系的三种映射策略:subclass、joined-subclass以及union-subclass。 首先,让我们理解继承关系在面向对象编程中的重要性。继承允许我们创建一个类(子类)作为另一个类(父类)...

    @hibernate Tag Reference

    @hibernate.joined-subclass-key(column="animal_id") public class Dog extends Animal { // ... } ``` #### 二、@hibernate Tag for Method Level 在方法级别上的@hibernate Tag通常用于定义集合或其他属性的...

    hibernate 学习笔记4

    &lt;joined-subclass name="Customer" table="customer"&gt; &lt;/joined-subclass&gt; &lt;joined-subclass name="Employee" table="employee"&gt; &lt;/joined-subclass&gt; ``` ##### 每个具体类一张表 (Table per Concrete ...

    Hibernate与HQL

    - **连接的子类映射**(`joined-subclass`):实现多表继承,每个子类有自己的表,通过`&lt;joined-subclass&gt;`元素映射。 ### Hibernate 查询语言 (HQL) HQL使我们能够用面向对象的方式来编写查询语句,避免了与SQL的...

    hibernate的继承映射(InheritanceMapping)[文].pdf

    但Hibernate不支持在同一阶级元素下混合使用&lt;subclass&gt;、&lt;joined-subclass&gt;和&lt;union-subclass&gt;。 10.1.5. 每个具体类一张表(Table per concrete class) 每个具体类(非抽象类)都有自己的表,不包括抽象类。这种...

    Hibernate3.1_学习源码

    配置文件:只配置父类的映射文件,在其中加入joined-subclass将两个子类实体映射关系添加 2) 数据库表:一张表,包括公共字段、特有字段、区分字段 实体层设计:与第一种方法设计一样,设计三个实体类,分父类和...

    NHibernate中文帮助手册API

    连接的子类(joined-subclass)  5.1.15. 联合子类(union-subclass)  5.1.16. 连接  5.1.17. map, set, list, bag  5.1.18. 引用(import)  5.2. NHibernate 的类型  5.2.1. 实体(Entities)和值(values) ...

    hibernate基础笔记

    此外,还可以通过`subclass`、`joined-subclass`或`union-subclass`元素实现类的继承映射。 总结来说,Hibernate的基础配置主要包括导入相关库和DTD文件,以及创建映射文件来定义实体类与数据库表的对应关系。映射...

    hibernate_问题详解

    `&lt;joined-subclass&gt;`元素用于定义子类,并通过`&lt;key column&gt;`指定引用父类的列。 **Query对象的使用** Hibernate的Query对象提供了灵活的查询方式: - **属性查询**:通过`createQuery()`方法创建查询,然后执行`...

    hibernate 经典题目 其中包括很多核心的题目

    id&gt;`(复合主键)、`&lt;joined-subclass&gt;`(共享表的继承)、`&lt;subclass&gt;`(单表的继承)、`&lt;union-subclass&gt;`(联合表的继承)、`&lt;inverse&gt;`(双向关联的维护关系)、`&lt;cascade&gt;`(级联操作)、`&lt;version&gt;`(乐观锁...

    Hibernate考试题.pdf

    非实体类型的组成部分用`component`表示,继承关系的描述中,单表策略用`subclass`,多表策略用`joined-subclass`或`table-per-class`。双向关联关系的维护属性为`inverse`,级联操作属性为`cascade`,乐观锁通常...

    nhibernate reference

    5.1.17 joined-subclass元素,用于映射联合子类。 5.1.18 union-subclass元素,用于映射联合子类。 5.1.19 join元素,用于显式指定连接条件。 5.1.20 map、set、list、bag元素,用于集合映射。 5.1.21 import元素,...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    这种策略是Hibernate提供的四种继承映射策略之一,其他还包括“表-per-hierarchy”,“表-per-concrete-class”和“joined-subclass”。 首先,让我们理解什么是继承映射。在面向对象编程中,类可以有继承关系,...

    hibernate-mapping

    在XML映射文件中,可以使用`&lt;subclass&gt;`或`&lt;joined-subclass&gt;`元素来定义子类,而在注解方式下,可以使用`@Inheritance`和`@DiscriminatorValue`等注解。 7. Collection Mapping(集合映射) 当一个对象需要关联多...

    MAPPING Hibernate方法小结.doc

    - **策略1**(joined-subclass):每个子类对应一个表,共享主键。 - **策略2**(discriminator):根类对应一个表,用识别字段区分子类。 - **策略3**:叶子类各自对应一个表,不支持多态查询。 - **关联**: ...

    Hibernate 经典例子全

    Hibernate支持单继承和多层继承的映射,通过`&lt;subclass&gt;`或`&lt;joined-subclass&gt;`标签将子类映射到数据库中的特定表,这在设计复杂的对象模型时非常有用。 **四、一对一关系映射** 在`hibernate_one2one_ufk_1`示例...

Global site tag (gtag.js) - Google Analytics