wiflish
          Loving Life! Loving Coding!
          posts - 98,comments - 98,trackbacks - 0
          一個Person可以參加多個Event,一個Event有多個Person參加。
          映射文件如下:
          <!-- Person.hbm.xml -->
          <
          hibernate-mapping?package="events">
          ??
          <class?name="Person"?table="person">
          ??????
          <id?name="id"?column="person_id">
          ??????????
          <generator?class="native"/>
          ??????
          </id>
          ??????
          <property?name="age"?length="0"/>
          ??????
          <property?name="firstname"/>
          ??????
          <property?name="lastname"/>
          ??????
          <set?name="events"?table="person_event">
          ??????????
          <key?column="person_id"/>
          ??????????
          <many-to-many?column="event_id"?class="events.Event"/>
          ??????
          </set>
          ??
          </class>
          </hibernate-mapping>

          <!-- Event.hbm.xml -->
          <
          hibernate-mapping>
          ??
          <class?name="events.Event"?table="events">
          ??????
          <id?name="id"?column="event_id">
          ????????????
          <generator?class="native"/>
          ??????
          </id>
          ??????
          <property?name="date"?column="events_date"?type="timestamp"/>
          ??????
          <property?name="title"?column="events_title"/>
          ??????
          <set?name="participants"?table="person_event"?inverse="true">
          ??????????
          <key?column="event_id"/>
          ??????????
          <many-to-many?column="person_id"?class="events.Person"/>
          ??????
          </set>
          ??
          </class>
          </hibernate-mapping>

          inverse=true的含義: 由雙向關聯另一方維護該關聯,己方不維護該關聯(只能進行查詢操作)。在上述代碼中,由Person方維護該<many-to-many>關系,示例代碼如下(以向Person參與的Event中加入新的Event為例):
          ????????Session?session?=?HibernateUtil.getSessionFactory().getCurrentSession();
          ????????session.beginTransaction();
          ????????Person?p?
          =?(Person)?session.load(Person.class,?personId);
          ????????Event?e?
          =?(Event)?session.load(Event.class,?eventId);
          ????????p.getEvents().add(e);//執行該代碼時,hibernate會向中間表 person_event中插入person_id和event_id記錄,如果換成e.getParticipants().add(p)的話,該代碼將不會被執行,即hibernate不會向表person_event中插入記錄。
          ????????session.getTransaction().commit();

          要注意的一點:在雙向關聯的關系中,映射的column(和table)的值要一致(即要用相同的表名和列名),不然設置為inverse="true"的這方將失去這個雙向關系,而變成了一個單向關聯。
          posted on 2006-06-15 17:16 想飛的魚 閱讀(2939) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 大余县| 土默特右旗| 剑河县| 荔浦县| 双辽市| 嵊泗县| 峨眉山市| 马公市| 江安县| 泌阳县| 满洲里市| 公主岭市| 元氏县| 赤壁市| 东乌珠穆沁旗| 马山县| 永年县| 郯城县| 新竹市| 平阴县| 綦江县| 平泉县| 蚌埠市| 都江堰市| 山东| 藁城市| 嵊州市| 英德市| 山丹县| 丹东市| 兰溪市| 阜城县| 定州市| 洛扎县| 沧源| 蓬溪县| 三门峡市| 安平县| 资源县| 抚松县| 蓬安县|