Hibernate 继承关系映射

 

Hibernate day01

cascade=”none”  cascade=”save-update” cascade=”save-update,delete” cascade=”delete”

 

Usr

Set<Account>  集合元素的改变不会引起数据操作  

cascade=”delete-orphan”  可以解决上面的问题,可以删除集合中被删除的元素   [删除孤儿]

 

继承关系映射

1.父子类关联   --------------------------------   数据库主外键关联

2.继承映射

1.一个类一个表

父类一个表  -------------主键关联------------------   子类一个表

这种解决方案非常符合面向对象的思想.支持多态,查询的父类的时候就可以把子类查询出来.

Account  账户     两个子类 DebitAccount         CreditAccount

配置如下:就一个配置文件

<!--继承映射配置 将子类的配置写在父类的配置文件中 -->

         <joined-subclass name="DebitAccount" table="lilp_debit">

             <key column="did"/>   //一个类一个,子类表需要通过外键与父类关联

             <property name="currency"

                       column="currency"

                       not-null="true"/>

         </joined-subclass>

        

         <joined-subclass name="CreditAccount" table="lilp_credit">

             <key column="cid"/>

             <property name="credit"

                       column="credit"

                       not-null="true" />

         </joined-subclass>

 

2.所有类一张表

使用一张表把所有的字段都放进去,这种解决方案的缺点,需要加一个辨别类型的字段,

降了主键的每个字段必须允许为空  优点:支持多态,字段比较少时,操作比较方便,效率较高

配置如下:

<!--子类类型字段 -->

        <!--需要配置一个类型字段 --> //这个字段标记每条账户记录的类型,是信用账户还中普通账户

         <discriminator column="TYPE"/>

         <subclass name="DebitAccount"

                         discriminator-value="D">

             <property name="currency"

                       column="currency"/>

         </subclass>

        

         <subclass name="CreditAccount"

                   discriminator-value="C">

             <property name="credit"

                       column="credit"/>

         </subclass>

3.一个实体类一上表   父类不要表, 为子类建表

解决方案缺点:不支持多态查询   对继承关系映射不是很完整

<!--一个实体一个表 -->

         <union-subclass name="DebitAccount" table="lilp_debit1">

             <property name="currency"

                       column="currency"

                       not-null="true"/>

         </union-subclass>

        

         <union-subclass name="CreditAccount" table="lilp_credit1">

             <property name="credit"

                       column="credit"

                       not-null="true"/>

         </union-subclass> 

使用原则:看总字段数据多少,如果较少,可以采用所有类一个表的解决方案 [简单  查询效率高]

 

 

你可能感兴趣的:(c,数据库,Hibernate,table,delete)