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的含義: 由雙向關(guān)聯(lián)另一方維護(hù)該關(guān)聯(lián),己方不維護(hù)該關(guān)聯(lián)(只能進(jìn)行查詢操作)。在上述代碼中,由Person方維護(hù)該<many-to-many>關(guān)系,示例代碼如下(以向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);//執(zhí)行該代碼時,hibernate會向中間表 person_event中插入person_id和event_id記錄,如果換成e.getParticipants().add(p)的話,該代碼將不會被執(zhí)行,即hibernate不會向表person_event中插入記錄。
          ????????session.getTransaction().commit();

          要注意的一點(diǎn):在雙向關(guān)聯(lián)的關(guān)系中,映射的column(和table)的值要一致(即要用相同的表名和列名),不然設(shè)置為inverse="true"的這方將失去這個雙向關(guān)系,而變成了一個單向關(guān)聯(lián)。
          posted on 2006-06-15 17:16 想飛的魚 閱讀(2940) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 水富县| 和顺县| 滨州市| 郧西县| 阜城县| 冷水江市| 锦州市| 天长市| 逊克县| 济源市| 南靖县| 上虞市| 乐东| 宁城县| 黔东| 拉萨市| 谷城县| 临猗县| 镇康县| 呼玛县| 长顺县| 淮滨县| 巴楚县| 五河县| 会宁县| 卫辉市| 房产| 吕梁市| 南雄市| 城固县| 襄汾县| 文安县| 临沂市| 自贡市| 昂仁县| 娱乐| 建平县| 海兴县| 古浪县| 铅山县| 平湖市|