Hibernate第三天

来源:互联网 发布:中日韩围棋 知乎 编辑:程序博客网 时间:2024/06/15 04:49

1. 多对多的关联映射

  1. 列子:程序员开发程序
  2. 两个一对多的关系就构成了多对多的关系
  3. 代码演示:

     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. 继承映射

  1. 普通继承映射: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>
  2. 所有子类对应一张表:只有分类才能知道谁是谁的数据

    <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>
  3. 子类以外键的形式连接:注意两点 主键的不能使用自增长 使用的是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>
  4. 不是使用普通类的继承映射,第一种要配置很多文件,所有我们采用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.一对一映射

  1. 列子:人<——————->身份证
  2. 代码:

       <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>