天天看點

【SSH系列】Hibernate映射-- 多對一單向關聯映射

      在hibernate中非常重要的就是映射,在前面的博文中,小編簡單的介紹了基本映射,基本映射是對一個實體進行映射,關聯映射就是處理多個實體之間的關系,将關聯關系映射到資料庫中,所謂的關聯關系在對象模型中有一個或多個引用。這個比較簡單,但是基礎知識還是需要好好掌握的哦,還有一些關聯映射,比如user && group,她們之間的關系是一對多,我們知道一個使用者隻能屬于一個組,但是一個組可以包好N多個使用者,是以他們之間的關系就是多對一的關系,接着我們來看他們的對象模型以及關系模式。

        所謂多對一單向關聯映射,就是 多的一端維護關聯關系,在“多”的一端加入一個外鍵,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外鍵,指向“一”的一端。ok,接着我們來看User and Group的對象模型以及關系模式模型,首先對象模型:

【SSH系列】Hibernate映射-- 多對一單向關聯映射

       接着關系模型如下所示:

【SSH系列】Hibernate映射-- 多對一單向關聯映射

       接着,小編用代碼來實作相應的原理,還請小夥伴們多多指教哦。

       第一步、建立User和Group兩個實體類,并且編寫代碼,首先是User類,代碼如下所示:   

     接着編寫Group的代碼,如下所示:

       第二步、我們要從使用者看到組,是以要關聯,so,需要在User裡面添加Group代碼,編寫映射檔案User.hbm.xml 和Group.hbm.xml。首先User.hbm.xml,代碼如下所示:

       接着編寫Group.hbm.xml,代碼如下所示:

       第三步、編寫Hibernate.cfg.xml映射檔案裡面的内容,代碼如下所示:

       第四步、建立資料庫,并且運作ExportDB檔案,我們來看一下資料庫裡面的資訊,效果如下所示:

【SSH系列】Hibernate映射-- 多對一單向關聯映射

       關聯映射已經搞定,接下來向裡面添加資料,看看關聯如何發揮作用。

       第五步、建立Many2oneTest,編寫第一個方法,如下所示:

       運作這個方法,我們發現,在清理緩存的時候發生錯誤TransientObjectException,因為Group為Transient狀态,沒有被session,在資料庫中沒有比對的資料,而User為persistent狀态,在清理緩存時Hibernate在緩存中無法找到Group,so--Persistent狀态的對象不能引用Transistent狀态的對象,ok,接着,我們來改進一下相關代碼如下所示:

       運作,發現現在可以可以正确的儲存資料,因為Group和User都是Persistent狀态的對象是以在hibernate清理緩存時在session中可以找到關聯對象。接着再編寫一個方法,介紹一個屬性,這個屬性叫做級聯,級聯就是一些連鎖性的操作,級聯的意思是指定兩個對象之間的操作關聯關系,對一個對象執行了操作之後,對其指定的級聯對象也需要執行相同的操作。比如儲存某個使用者的時候,可以級聯把别人儲存了。首先,修改User.hbm.xml檔案的代碼,如下所示:

      方法編寫,如下所示:

       執行這個方法,ok,運作,如下所示:

【SSH系列】Hibernate映射-- 多對一單向關聯映射

        小編寄語:該博文,小編主要簡單的介紹了hibernate中的多對一單向關聯映射,項目中,多對一關聯映射是最常見的映射,但它是Hibernate的關聯映射中最簡單的一種映射關系。學習就是這樣,點點滴滴的積累,下篇博文,小編将繼續介紹hibernate的相關知識,敬請期待`(*∩_∩*)′!