Hibernate继承关系映射
一个类继承体系一张表(subclass)(映射文件)
<class name=”Employee” table=”employee” discriminator-value=”0”>
<id name=”id”>
<generator class=”native”/>
</id>
<discriminator column=”type” type=”int”/>
<property name=”name”/>
<many-to-one name=”depart” column=”depart_id”/>
<subclass name=”Skiller” discriminator-value=”1”>
<property name=”skill”/>
<subclass name=”Sales” discriminator-value=”2”>
<property name=”sell”/>
</subclass>
</class>
每个子类一张表(joined-subclass)(映射文件)
<class name=”Employee” table=”employee”>
<id name=”id”>
<generator class=”native”/>
</id>
<property name=”name”/>
<joined-subclass name=”Skiller” table=”skiller”>
<key column=”employee_id”/>
<property name=”skill”/>
</joined-subclass>
<joined-subclass name=”Sales” table=”sales”>
<key column=”employee_id”/>
<property name=”sell”/>
</joined-subclass>
</class>
混合使用“一个类继承体系一张表”和“每个子类一张表”(映射文件)
<class name=”Employee” table=”employee”>
<id name=”id”>
<generator class=”native”/>
</id>
<discriminator column=”type”/>
<property name=”name”/>
<subclass name=”Skiller”>
<property name=”net”/>
</subclass>
<subclass name=”Sales”>
<join table=”sales”>
<key column=”employee_id”/>
<property name=”sell”/>
</join>
</subclass>
</class>
每个具体类一张表(union-subclass)(映射文件)
<class name=”Employee” abstract=”true”>
<id name=”id”>
<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>
主键不能是identity类型,如果父类是abstract=“true”就不会有表与之对应。隐式多态,映射文件没有联系,限制比较多很少使用。
Cascade和inverse(Emplyee—Department)
Cascade用来说明当对助对象惊醒某种操作时是否对其关联的从对象也做类似的操作,常用的cascade;
None,all,save-update,delete,lock,refresh,evict,relicate,persist,merge,delete-orphan(one-to-many)。一般对many-to-one,many-to-many,不设置级联,在<one-to-one>和<one-to-many>中设置级联。
Inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时对数据库表的影响),在one-to-many和many-to-many的集合定义中实用,inverse=“true”表示该对象不维护关联关系;该属性得值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。
One-to-many维护关联关系就是更新外键。Many-to-many维护关联关系就是在中间表增减记录。
注:配置成one-to-one的对象不维护关联关系。