alxe1528

BlogJava 联系 聚合 管理
  3 Posts :: 11 Stories :: 2 Comments :: 0 Trackbacks

实体类关系如图所示:

映射到数据库中:

1.单独一张表(鉴别器)如图

 

配置文件写法:

    <class name="Employee" table="employee"discriminator-value="0">
        <id column="id" name="id">
            <generator class="native" />
        </id>
        <discriminator column="type" type="int" />
        <property name="name" />
        <subclass name="Skiller" discriminator-value="1">
            <property name="skill" />
        </subclass>
        <subclass name="Sales" discriminator-value="2">
            <property name="sell" />
        </subclass>
    </class>

说明:discriminator 鉴别器,默认type是string。

          subclass :子类

总结:这种形式查询速度快,但数据库表结构不合理,表中有很多空的字段值。特别是子类特有的属性很多的时候。

2.父类和子类各映射一张表(内连接),如图。

 

配置文件写法:

    <class name="Employee" table="employee">
        <id column="id" name="id">
            <generator class="native" />
        </id>
        <property  name="name" />
        <joined-subclass name="Skiller" table="skiller">
            <key column="emp_id"/>
            <property name="skill"/>
        </joined-subclass>
        <joined-subclass name="Sales" table="sales">
            <key column="emp_id"/>
            <property name="sell"/>
        </joined-subclass>
    </class>

总结:这种形式数据库表结构合理,但增删改查的速度都较慢,性能不好。

注意:查询是最好注明子类类名(get(Sales.class , id) ),不要用多态查询( get(Employee.class , id) ),不然性能会很差

3.鉴别器与内连接结合。

配置文件写法:
<class name="Employee" table="employee"discriminator-value="0">
        <id column="id" name="id">
            <generator class="native" />
        </id>
        <discriminator column="type" type="int" />
        <property name="name" />
        <subclass name="Skiller" discriminator-value="1">
            <property name="skill" />
        </subclass>
        <subclass name="Sales" discriminator-value="2">
            <join table="sales">
                <key column="emp_id"/>
                <property name="sell" />
            </join>            
        </subclass>
    </class>
总结:这种形式一般是在Sales类特有的属性很多,Skiller特有属性少的时候用。

4.每个具体类映射一张独立表。


 配置文件写法:

<!-- 父类:Employee,采用每个具体类一张表的方式(抽象类不对应表) -->
    <class name="Employee" table="employee">
        <id column="id" name="id">
        <!-- 这时不能使用identity生成策略,因为要求整个继承结构中所有的数据记录的id不能重复。
                    因为下面是union-subclass  -->
            <generator class="hilo" />
        </id>
        <property name="name" />
        <union-subclass name="Skiller" table="skiller">
            <property name="skill" />
        </union-subclass>
        <union-subclass name="Sales" table="sales">
            <property name="sell"/>
        </union-subclass>
    </class>

若父类为抽象类,则将父类Class配置(第一句)写成:

<class name="Employee" table="employee" abstract="true">

总结:这种形式 增删改 的速度都很好,但 查询 时较慢。

posted on 2011-12-27 22:09 郑健成 阅读(75) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: