zoukankan      html  css  js  c++  java
  • NHibernate Step By Step(2)继承映射

    分三种

    1.单表继承

    既然是单表继承就需要一个键值来标识类别

    1. class以discriminator-value来标识类别
    2. discriminator 用以表示鉴别器的表字段
    3. 继承的类以subclass来标识
    4. 以extends来标识继承的类


    (1)父类

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
    <class
    name="NHibernate.Test.Subclass.SubclassBase, NHibernate.Test"
    table="one_tab"
    discriminator-value="SUPER" 
    >
    <id
    name="Id"
    type="Int32"
    unsaved-value="0"
    column="joined_subclass_id"
    access="nosetter.camelcase-underscore"
    >
    <generator class="native" />
    </id>
    <discriminator column="disc_column" type="String" />
    <property name="TestLong" column="test_long" type="Int64" />
    <property name="TestString" column="test_string" type="String" />
    <property name="TestDateTime" column="test_date_time" type="DateTime" />
    </class>
    </hibernate-mapping>

    (2)子类

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
    <subclass
    extends="NHibernate.Test.Subclass.SubclassBase, NHibernate.Test"
    name="NHibernate.Test.Subclass.SubclassOne, NHibernate.Test"
    discriminator-value="SUB"
    >
    <property name="OneTestLong" column="one_test_long" type="Int64" />
    </subclass>
    </hibernate-mapping>


    (3)生成的数据库测试数据
    image

    看图更能理解意图

    2.鉴别器

    这里看一下鉴别器的使用,可以指定鉴别器的值,以辨别不同的类,如下:

    多个类映射到同张表,Foo 类以Green标识,Baz 则具备了Color 属性,Foo可以说是Baz的特殊类别,都是通过配置文件来实现

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" namespace="NHibernate.Test.Subclass.EnumDiscriminator" assembly="NHibernate.Test">
    <class name="Foo" table="subclass_enumdiscriminator" discriminator-value="Green">
    <id name="Id" type="Int64">
    <generator class="assigned"/>
    </id>
    <discriminator column="Color" type="NHibernate.Test.Subclass.EnumDiscriminator.Colors, NHibernate.Test"/>
    <subclass name="Bar" discriminator-value="Blue"/>
    </class>
    <class name="Baz" table="subclass_enumdiscriminator">
    <id name="Id" type="Int64">
    <generator class="assigned"/>
    </id>
    <property name="Color"/>
    </class>
    </hibernate-mapping>

    测试数据
    image

    3.每个子类一张表(具备与父类有关联关系的)

    映射文件

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
    <class name="NHibernate.Test.JoinedSubclass.Person, NHibernate.Test" table="person" proxy="NHibernate.Test.JoinedSubclass.Person, NHibernate.Test">
    <id name="Id" type="Int32" unsaved-value="0" column="person_id" access="nosetter.camelcase-underscore">
    <generator class="native"/>
    </id>
    <property name="Name" column="name"/>
    <property name="Sex" column="sex"/>
    <component name="Address">
    <property name="Street"/>
    <property name="Zip"/>
    <property name="Country"/>
    </component>
    <joined-subclass name="NHibernate.Test.JoinedSubclass.Employee, NHibernate.Test" table="empl" proxy="NHibernate.Test.JoinedSubclass.Employee, NHibernate.Test">
    <key column="person_id"/>
    <property name="Title" not-null="true" length="20"/>
    <property name="Salary" type="Decimal(19,5)"/>
    <many-to-one name="Manager"/>
    </joined-subclass>
    <joined-subclass name="NHibernate.Test.JoinedSubclass.Customer, NHibernate.Test" table="cust" proxy="NHibernate.Test.JoinedSubclass.Customer, NHibernate.Test">
    <key column="person_id"/>
    <property name="Comments"/>
    <many-to-one name="Salesperson"/>
    </joined-subclass>
    </class>
    </hibernate-mapping>

    生成表结构
    image
    image

    4.无关联关系的继承表

    即每张表都会生成父类的字段

    <class name="Person" table="UPerson">
    <id name="id"
    column="person_id"
    unsaved-value="0">
    <generator class="hilo"/>
    </id>
    <property name="name"
    unique-key="NameUniqueKey"
    not-null="true"
    length="80"/>
    <property name="sex"
    not-null="true"
    update="false"/>
    <component name="address">
    <property name="address" index="AddressIndex"/>
    <property name="zip" index="AddressIndex"/>
    <property name="country"/>
    </component>
    <union-subclass name="Employee" table="UEmployee">
    <property name="title"
    not-null="true"
    length="20"/>
    <property name="salary" />
    <many-to-one name="manager"/>
    </union-subclass>
    <union-subclass name="Customer" table="UCustomer">
    <property name="comments"/>
    <many-to-one name="salesperson"/>
    </union-subclass>
    </class>

    数据库表结构
    image
  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1536971.html
Copyright © 2011-2022 走看看