Hibernate 实体层设计--Table per subclass

此方法为多个类对应一张表。 通过discriminator在配置文件中设置判断字段。

 

TBook :

         private int pageCount

TDVD :

         private String regionCode

TItem :

        private String id ;
        private String name ;
        private String manufacturer ;

sql :

-- 删除表
DROP TABLE TItem ;

-- 创建表
CREATE TABLE TItem
(
    id varchar(32) not null primary key ,
    -- 通过此字段用于区分保存的是 Book还是 DVD
    category varchar(2) not null ,


    name varchar(20) not null ,  
    manufacturer varchar(20) not null ,


    regionCode varchar(2) ,  --DVD中的字段
    pageCount int     --Book中的字段
) ;

-- 事务提交
commit ;

 

TItem.hbm.xml:

<class name="TItem" table="TITEM">
        <id name="id " column="ID " type="string">
            <generator class="assigned" />
        </id>
<--定义公共字段-->
        <property name="name " column="NAME" type="string" not-null="true" />
        <property name="manufacturer " column="MANUFACTURER" type="string" not-null="true" />
<--定义判断字段-->
        <discriminator column="category " type="java.lang.String"></discriminator>

<--设置各个子类所对应的category -->
        <subclass name="TBook" discriminator-value="1" >
            <property name="pageCount " column="PAGECOUNT" type="int" />
        </subclass>
        <subclass name="TDVD" discriminator-value="2" >
            <property name="regionCode " column="REGIONCODE" type="string" />
        </subclass>
    </class>

你可能感兴趣的:(Hibernate,String,table,null,Class,generator)