【NHibernate】id標籤的unsaved-value屬性

來源:互聯網
上載者:User

標籤:style   c   class   blog   code   java   

父表

  <class name="Model.Customer, Model"         discriminator-value="0">    <!--unsaved-value="0" 主鍵表中不需要定義,而是需要在子表中定義-->    <id name="CustomerId"        column="CustomerId"        type="Int32"         unsaved-value="0">      <generator class="native" />      <!-- unsaved-value used to be null and generator was increment in h2.0.3 -->    </id>

 

子表

  <class name="Model.Order, Model"          table ="[Order]"         discriminator-value="0" lazy="false">    <id name="OrderId"         column="OrderId"         type="Int32"         unsaved-value="0">      <generator class="native" />      <!-- unsaved-value used to be null and generator was increment in h2.0.3 -->    </id>

 

瞭解unsaved-value,需要知道如下知識點:

1.unsaved-value預設值是null
2.id的type標籤屬性可以標示為:
【1】基本物件類型如int,long
【2】物件類型,如Int32,Int64

3.Nhibernate儲存機制:
當父物件調用save(),由於級聯的關係,儲存子物件,那麼儲存子物件的方式
到底是Upadate(已經持久化在資料庫中)
還是Save(還沒有持久化在資料庫中,只是剛剛在記憶體中新new)?

如何判斷是用調用upadte還是調用Save,
答案是:
用unsaved-value的值與HNibernate自動從資料庫中擷取的子類對象的Id進行比較,
   (注意:如果沒有持久化,HNibernate自動從資料庫中擷取的子類對象的Id的值等於null)
  如果是:

【1】unsaved-value的值與子類對象的Id相等,表明沒有持久化,調用save;
  【2】unsaved-value的值與子類對象的Id不相等,表明已持久化,調用Update;


    綜上,
當子表id標籤的type標籤屬性標示為:
【1】基本物件類型如int,long,需要顯示明unsaved-value = 0,因為unsaved-value預設值是null,而基本物件類型如int的預設值為0,
這樣使得即使子類對象還沒有持久化,HNibernate自動從資料庫中擷取的子類對象的Id=0,
這樣根據上述的Nhibernate儲存機制,永遠調用Upadte,不會調用save。 
    <id name="OrderId"         column="OrderId"         type="Int"         unsaved-value="0">

【2】物件類型,如Int32,Int64,不需要
    <id name="OrderId"         column="OrderId"         type="Int32" >

 



 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.