Hibernate承袭映射三种策略学习
Hibernate继承映射三种策略学习
我的CSDN博客http://blog.csdn.net/wj_myth/article/details/6788252
假设实体关系如下:
继承映射三种策略:
每个类分层结构 一张表 Table per class hierarchy
这种继承映射策略,整个继承结构一张表,则此策略共建一张表,要求字段不能有非空约束,而且要添加多一个字段表示类型(如这里的PAYMENT_TYPE)
注:但此PAYMENT_TYPE字段并未在类属性中,只存在映射文件和数据库表中
每个子类一张表 Table per subclass
这种继承映射策略,每个类一张表,抽象类也有表,则共建三张表,要求子表有个字段id,因为此策略要求子表和父表是一对一的关系
注:子表的id字段并未在类属性中,只存在映射文件和数据库表中
每个具体类一个张表 Table per concrete class
这种继承映射策略,每个具体类一张表,则此策略共建两张表,这种策略不支持identity生成策略,要求整个继承结构即所有表所有记录的id不能重复
我的CSDN博客http://blog.csdn.net/wj_myth/article/details/6788252
假设实体关系如下:
继承映射三种策略:
每个类分层结构 一张表 Table per class hierarchy
<class name="Payment"> <id name="id"> <generator class="native" /> </id> <discriminator column="PAYMENT_TYPE" type="string" /> <property name="typeName" /> <property name="amount" /> <subclass name="Credit" discriminator-value="CREDIT"> <property name="number" /> <property name="type" /> <property name="expDate" /> </subclass> <subclass name="Cash" discriminator-value="CASH"> <property name="cashTenderd" /> </subclass> <subclass name="Check" discriminator-value="CHECK"> <property name="name" /> <property name="bankId" /> </subclass> </class>
这种继承映射策略,整个继承结构一张表,则此策略共建一张表,要求字段不能有非空约束,而且要添加多一个字段表示类型(如这里的PAYMENT_TYPE)
注:但此PAYMENT_TYPE字段并未在类属性中,只存在映射文件和数据库表中
每个子类一张表 Table per subclass
<!-- 每个子类一张表 Table per subclass --> <!-- 共三张表 --> <class name="Payment"> <id name="id"> <generator class="native" /> </id> <property name="typeName" /> <property name="amount" /> <joined-subclass name="Credit"> <key column="id"></key> <property name="number" /> <property name="type" /> <property name="expDate" /> </joined-subclass> <joined-subclass name="Cash"> <key column="id"></key> <property name="cashTenderd" /> </joined-subclass> <joined-subclass name="Check" table="Check_"> <key column="id"></key> <property name="name" /> <property name="bankId" /> </joined-subclass> </class>
这种继承映射策略,每个类一张表,抽象类也有表,则共建三张表,要求子表有个字段id,因为此策略要求子表和父表是一对一的关系
注:子表的id字段并未在类属性中,只存在映射文件和数据库表中
每个具体类一个张表 Table per concrete class
<!-- 每个具体类一张表 Table per concrete class --> <!-- 共两张表 --> <class name="Payment"> <id name="id"> <generator class="hilo"> <param name="table">hi_value</param> <param name="column">next_value</param> <param name="max_lo">100</param> </generator> </id> <property name="typeName" /> <property name="amount" /> <union-subclass name="Credit"> <property name="number" /> <property name="type" /> <property name="expDate" /> </union-subclass> <union-subclass name="Cash"> <property name="cashTenderd" /> </union-subclass> <union-subclass name="Check" table="Check_"> <property name="name" /> <property name="bankId" /> </union-subclass> </class>
这种继承映射策略,每个具体类一张表,则此策略共建两张表,这种策略不支持identity生成策略,要求整个继承结构即所有表所有记录的id不能重复