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 想飛的魚 閱讀(2947) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 健康| 蒙自县| 石河子市| 高唐县| 昭觉县| 容城县| 个旧市| 霍邱县| 商河县| 广南县| 高雄市| 金塔县| 江阴市| 嵊泗县| 湖州市| 通化市| 建昌县| 玛纳斯县| 连南| 鹤峰县| 商丘市| 富阳市| 汽车| 南川市| 威海市| 永康市| 张掖市| 丰顺县| 大石桥市| 聂拉木县| 周宁县| 蒙自县| 油尖旺区| 青阳县| 慈利县| 崇左市| 册亨县| 星座| 鹤岗市| 巴彦县| 扎鲁特旗|