和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          持久化對象級聯關系

          類之間關聯的Hibernate表現

          在Java程序中,類之間存在多種包含關系,典型的三種關聯關系有:一個類擁有另一個類的成員,一個類擁有另一個類的集合的成員;兩個類相互擁有對象的集合的成員.在Hibernate中,我們可以使用映射文件中的many-to-one, one-to-many, many-to-many來實現它們.這樣的關系在Hibernate中簡稱為多對一,一對多和多對多.

          多對一的類代碼

          事件與地點是典型的多對一關系,多個事件可以在一個地點發生(時間不同),一個地點可發生多個事件.它們的對應關系是(多)事件對(一)地點.
          兩個類的代碼如右:
          public class Event{
            private String id;
            private String name; 
            private Location location;
          }

          public class Location{
            private String id;
            private String name;
          }

          多對一的映射文件

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.Event"
              table="Event_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name" column="name" />
              <many-to-one name="location" column="locationId" class="com.sitinspring.domain.Location"/>
            </class>
          </hibernate-mapping>


          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.Location"
              table="Location_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name" column="name" />
            </class>
          </hibernate-mapping>

          多對一的表數據


          一對多的類代碼

          如果一個用戶有多個權限,那么User類和Privilege類就構成了一對多的關系,User類將包含一個Privilege類的集合.

          public class User{
            private String id;
            private String name;
            private Set<Privilege> privileges=new LinkedHashSet<Privilege>();
          }

          public class Privilege{
            private String id;
            private String userId;
            private int privilegeLevel;
          }


          一對多的映射文件

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.User"
              table="User_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name" column="name" />
              <set name="privileges">
                <key column="userId"/>
                <one-to-many class="com.sitinspring.domain.Privilege"/>
              </set>
            </class>
          </hibernate-mapping>


          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.Privilege"
              table="Privilege_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="userId" column="userId" />
              <property name="privilegeLevel" column="privilegeLevel" />
            </class>
          </hibernate-mapping>


          一對多的表數據



          多對多

          多對多關系 是指兩個類相互擁有對方的集合,如文章和標簽兩個類,一篇文章可能有多個標簽,一個標簽可能對應多篇文章.要實現這種關系需要一個中間表的輔助.

          類代碼如右:

          public class Article{
              private String id;
              private String name;
             
              private Set<Tag> tags = new HashSet<Tag>();
          }

          public class Tag{
              private String id;
              private String name;
             
              private Set<Article> articles = new HashSet<Article>();
          }

          多對多的映射文件

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.Article" table="ARTICLE_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name" column="NAME" />

              <set name="tags" table="ARTICLETAG_TB"  cascade="all" lazy="false">
                <key column="ARTICLEID" />
                <many-to-many column="TAGID" class="com.sitinspring.domain.Tag" />
              </set>
            </class>
          </hibernate-mapping>


          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.Tag" table="TAG_TB">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name"  column="NAME" />
             
              <set name="articles" table="ARTICLETAG_TB" cascade="all" lazy="false">
                <key column="TAGID" />
                <many-to-many column="ARTICLEID" class="com.sitinspring.domain.Article" />
              </set>
            </class>
          </hibernate-mapping>


          多對多的表數據

           

          源碼下載:
          http://www.aygfsteel.com/Files/junglesong/HibernateMapping20080430203526.rar

          posted on 2008-04-30 20:33 和風細雨 閱讀(810) 評論(0)  編輯  收藏 所屬分類: Hibernate

          主站蜘蛛池模板: 榆树市| 哈巴河县| 麻城市| 筠连县| 白玉县| 泸水县| 沙坪坝区| 桐庐县| 岳阳县| 曲沃县| 桐梓县| 宜兰市| 柳河县| 阳江市| 宝鸡市| 基隆市| 蓝田县| 平武县| 常德市| 政和县| 手游| 永福县| 尚志市| 兴城市| 隆德县| 许昌县| 庆安县| 泸西县| 东乌珠穆沁旗| 博兴县| 宁蒗| 天等县| 搜索| 龙泉市| 浦北县| 贵阳市| 博乐市| 阿合奇县| 白城市| 正蓝旗| 武川县|