NHibernate一對多單雙向關聯映射-NHibernate入門到精通系列9

本節爲您介紹:NHibernate一對多單雙向關聯映射

本節內容主要分兩個方面進行介紹:


1:單向映射

2:雙向映射



下面讓我們開始介紹:

一、NHibernate單向映射

還是照舊,先上圖:


一個班級有多個學生,一對多!其實也可以反過來說,多個學生對一個班級,多對一。

接然仍舊,上Xml配置。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  <class name="Student" table="T_Student" lazy="true" >
    <id name="ID" type="int" column="StudentID">
      <generator class="native"/>
    </id>
 
    <property name="Name" type="string">
      <column name="Name" length="51"/>
    </property>

  </class>
</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  <class name="Class" table="T_Class" lazy="true" >
    <id name="ID" type="int" column="ClassID">
      <generator class="native"/>
    </id>
 
    <property name="Name" type="string">
      <column name="Name" length="51"/>
    </property>

    <bag name="Students">
      <key column="ClassID"/>
      <one-to-many class="Student"/>
    </bag>
   
  </class>
</hibernate-mapping>

這裏有一點說明:
Class中Students映射類型爲:IList<Student>。即是用<bag>和<one-to-many>標籤來描述“一對多”關聯映射。

單元測試就省略了,大夥見的太多,不羅嗦!

二、NHibernate雙向映射

雙向就是互相關聯映射了,這裏上Xml配置:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  <class name="Student" table="T_Student" lazy="true" >
    <id name="ID" type="int" column="StudentID">
      <generator class="native"/>
    </id>
 
    <property name="Name" type="string">
      <column name="Name" length="50"/>
    </property>

    <many-to-one name="Class" column="ClassID" />
   
  </class>
</hibernate-mapping>

說明:

若Class屬性修改爲不允許空,而值爲空,將拋出“not-null property references a null or transient value”的異常。

如果允許爲空,我們修改下Xml映射爲:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  <class name="Class" table="T_Class" lazy="true" >
    <id name="ID" type="int" column="ClassID">
      <generator class="native"/>
    </id>

    <property name="Name" type="string">
      <column name="Name" length="50"/>
    </property>

    <!--設置爲不可空-->
    <bag name="Students" inverse="true" cascade="all">
      <key column="ClassID" not-null="true"/>
      <one-to-many class="Student"/>
    </bag>

  </class>
</hibernate-mapping>

這樣爲空時便宜不會拋異常了。

本節NHibernate一對多單雙向關聯映射就輕鬆講解到這了,歡迎期待下一節。

發佈了45 篇原創文章 · 獲贊 4 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章