1. 多对多的关联映射
- 列子:程序员开发程序
- 两个一对多的关系就构成了多对多的关系
代码演示:
Project的一方的配置 <!--配置的是多对多的集合映射--> <set name="devs" table="t_relation" cascade="all"> <!--上面的这个key你记住就是映射的当前的类的主键--> <key column="pro_id"></key> <!--配置的是相关联的另外一张表 column:配置的是对方的主键在关系表中映射的这个值的列名 class:配置的是对方的这个名字 --> <many-to-many column="dev_id" class="Developer"></many-to-many> </set> Developer一方的配置 <!--配置的是多对多的集合映射--> <set name="pros" table="t_relation" cascade="all"> <!--上面的这个key你记住就是映射的当前的类的主键--> <key column="dev_id"></key> <!--配置的是相关联的另外一张表 column:配置的是对方的主键在关系表中映射的这个值的列名 class:配置的是对方的这个名字 --> <many-to-many column="pro_id" class="Project"></many-to-many> </set> 注意:在实际开发中many to many 只需要配置一方 不存在谁维护谁的说法
2. 继承映射
普通继承映射:animal—>dog
<hibernate-mapping package="com.qf.extend2"> <class name="Dog" table="t_dog"> <!--配置的是表里面的主键--> <id name="id" type="java.lang.Integer"> <generator class="native"> </generator> </id> <!--配置的是普通的列--> <property name="color"></property> <property name="name"></property> <property name="num"></property> </class> </hibernate-mapping>
所有子类对应一张表:只有分类才能知道谁是谁的数据
<hibernate-mapping package="com.qf.extend3"> <class name="Animal" table="t_animal_01"> <!--配置的是表里面的主键--> <id name="id" type="java.lang.Integer"> <generator class="native"> </generator> </id> <!-- 下面就配置一个非公共的 --> <!--首先的整个分类 下面这个就是分类的这个列 --> <discriminator column="type_" length="30" type="string"></discriminator> <!--配置的是普通的列--> <property name="color"></property> <property name="name"></property> <!--分别来配置我们的 dog 和 fish了--> <subclass name="Dog" discriminator-value="dog_"> <!--要给这个孩子配置个类型--> <property name="num" type="string"></property> </subclass> <!--配置鱼的信息--> <subclass name="Fish" discriminator-value="fish_"> <property name="fishCoatCount" type="java.lang.Integer"></property> </subclass> </class> </hibernate-mapping>
子类以外键的形式连接:注意两点 主键的不能使用自增长 使用的是join-class 来进行分表的
<!-- 下面就配置一个非公共的 --> <!--首先的整个分类 下面这个就是分类的这个列 --> <discriminator column="type_" length="30" type="string"></discriminator> <!--配置的是普通的列--> <property name="color"></property> <property name="name"></property> <!--分别来配置我们的 dog 和 fish了--> <subclass name="Dog" discriminator-value="dog_"> <!--要给这个孩子配置个类型--> <property name="num" type="string"></property> </subclass> <!--配置鱼的信息--> <subclass name="Fish" discriminator-value="fish_"> <property name="fishCoatCount" type="java.lang.Integer"></property> </subclass> </class> </hibernate-mapping>
不是使用普通类的继承映射,第一种要配置很多文件,所有我们采用union-class的方式来配置子类
<hibernate-mapping package="com.qf.extend5"> <!-- abstract="true":这个表示的是不对应表 --> <class name="Animal" abstract="true"> <!--配置的是表里面的主键--> <id name="id" type="string"> <generator class="assigned"> </generator> </id> <!--配置的是普通的列--> <property name="color"></property> <property name="name"></property> <!--接下来就是配置加表的问题--> <union-subclass name="Dog" table="t_dog_03"> <property name="num"></property> </union-subclass> <!--下面就配置鱼了--> <union-subclass name="Fish" table="t_fish_03"> <property name="fishCoatCount"></property> </union-subclass> </class> </hibernate-mapping>
3.一对一映射
- 列子:人<——————->身份证
代码:
<hibernate-mapping package="com.qf.one2one"> <class name="IdCard" table="t_idcard"> <!--配置的是表里面的主键--> <id name="cardId" type="java.lang.Integer"> <generator class="native"> </generator> </id> <!--配置的是普通的列--> <property name="cardNum"></property> <!--下面配置的是引用主键的这一方--> <many-to-one name="people" column="p_id" class="People" cascade="all"></many-to-one> </class> </hibernate-mapping> People的配置 <hibernate-mapping package="com.qf.one2one"> <class name="People" table="t_people"> <!--配置的是表里面的主键--> <id name="pId" type="java.lang.Integer"> <generator class="native"> </generator> </id> <!--配置的是普通的列--> <property name="name"></property> <!--接下来应该配置一对一的映射--> <one-to-one name="idCard" class="IdCard" cascade="all"></one-to-one> </class> </hibernate-mapping>