posts - 68, comments - 19, trackbacks - 0, articles - 1
          1.one to many 單向
          這是一個用的比較多的對應關系,比如班級和學生,一個Classes對象對應著多個Stundent,那就需要在Classes類中持有對Stundent的引用,而此引用是一個Student對象的集合,因此應該在Classes的映射文件中描述此集合,因為hibernate對Set接口進行了擴展,所以Hibernate中的集合描述一般選擇Set。

          Classes類:
          private int id;
          private String name;
          private Set<Student> students;

          Student類:
          private int id;
          private String name;

          映射文件:
           <class name="com.vle.domain.Classes" table="t_classes">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <set name="student" >
             <key column="classesid"/>  <!--key標簽會在多的一端加入一個外鍵-->
             <one-to-many class="com.vle.domain.Student"/>
            </set>
           </class>

          映射一旦建立,能從Classes對象得到Student集合的迭代輸出,因為是單向,所以不能從學生得到班級。一般一對多設置成雙向,因為一旦將classesid屬性設置為非空,Classes在insert的時候會發生sql錯誤。所以很多時候關系由多的一方維護。

          2.one to many 雙向
          讓Student也知道和Classes的關系,反過來,是多個Student對象對應一個Classes對象,即many to one.此種關系是為了解決單向出現的問題,而不是需求驅動。
          Student:
          private Classes classes;

          映射文件:
           <class name="com.vle.domain.Student">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <many-to-one name="classes" column="classesid"/>
           </class>
          這里藍色字體部分一定要與Classes映射文件中的外鍵字段對應,否則不能保存到同一個字段。同時,要一的一端禁用維護關系:
          <set name="student" inverse="true">
          反轉后只能查詢,不能更新。

          3.many to many 單向
          User-->Role 用戶與角色
          User:
          private int id;
          private String name;
          private Set<Role> roleSet;
          Role:
          private int id;
          private String name;

          映射文件:
           <class name="User" table="t_user">
            <id name="id">
             <generator class="native"/>
            </id>
            <property name="name"/>
            <set name="roleSet" table="t_user_role">
             <key column="userid"/>
             <many-to-many class="Role" column="roleid"/>
            </set>
           </class>

          4.many to many 雙向
          只需要在Role類中引用User對象作為Set集合的元素并且在role映射文件中加入同樣的描述:
          private Set<User> userSet;

           <class name="Role" table="t_role">
            <id name="id">
             <generator class="native"/>
            </id>
            <property name="name"/>
            <set name="userSet" table="t_user_role">
             <key column="roleid"/>
             <many-to-many class="User" column="userid"/>
            </set>
           </class>
          兩個映射文件對應的表格一定是同一個--t_user_role。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 大余县| 华池县| 柳州市| 安丘市| SHOW| 远安县| 临夏县| 登封市| 聂拉木县| 安达市| 鄢陵县| 徐闻县| 商城县| 大方县| 南溪县| 博爱县| 永修县| 调兵山市| 土默特左旗| 临沭县| 句容市| 吉水县| 阿合奇县| 黎平县| 酉阳| 博客| 固镇县| 邛崃市| 潞城市| 漳浦县| 南靖县| 美姑县| 图片| 美姑县| 哈巴河县| 布尔津县| 昭苏县| 股票| 中卫市| 旌德县| 六盘水市|