繼續上篇博客
七、Hibernate雙向一對多關聯映射:讓多的一端來維護關系。
主要是解決一對多單向關聯的缺陷,而不是需求驅動的。
1、在Student.java實體類里添加Classes引用。private Classes classes;
2、Student.hbm.xml里添加many-to-one標簽:<many-to-one name="classes" column="classesid"/>.Classes.hbm.xml在例子(六)里的那個的基礎上加入反轉屬性inverse(以后將維護關系的工作交給了student)。
<set name="students" inverse="true">
<key column="classesid"></key>
<one-to-many class="com.juyahong.hibernate.Student"/>
</set>
注1:先保存classes,再保存student。
注2:一對多雙向關聯的映射方式:
- 在一的一端的集合上采用key標簽,可以使得多的一端加入一個外鍵。
- 在多的一端采用many-to-one標簽
注3:key標簽和many-to-one標簽加入的字段保持一致,否則會產生數據混亂。
注4:一對多關聯映射通常在多的一端維護關系,讓一的一端失效:
------inverse反轉屬性的使用:可以用在一對多和多對多雙向關聯上,inverse屬性默認為false,即表示在本端可以維護關系,如果inverse為true,即表示本端不維護關系,要交給另一端來維護關系,本端失效。它是控制方向上的反轉,只影響存儲。
------cascade是操作上的連鎖反應(暫時了解)。
八、Hibernate單向多對多關聯映射:
比如學生和課程之間的關系,用戶和角色之間的關系都是多對多關系。
1、User.java和Role.java實體類里都有兩個普通屬性id和name,在User.java里添加屬性,private Set roles;
2、修改User.hbm.xml映射文件:映射集合:
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com.juyahong.hibernate.Role" column="role_id"/>
</key>
</set>
九、Hibernate雙向多對多關聯映射:
1、Role.java里加入新集合private Set users;
2、在例子八的基礎上,修改Role.hbm.xml文件
<set name="users" table="t_user_role">
<key column="role_id"/>
<many-to-many class="com.juyahong.hibernate.User" column="user_id"/>
</key>
</set>
以上介紹了Hibernate中的七種映射關系(還包括映射主鍵和外鍵兩種),在學習這一塊的時候主要是能看懂UML圖,在這些前提下,修改兩個文件,一個模型類,還有一個映射文件。本文主要簡單的提到了需要注意修改的地方和一些注意的知識點,和一些理解的東西,我覺得懂得這些足以提綱挈領,足以入門,就沒有必要全部把代碼貼上來了。
通過學習Hibernate,讓我又提起了知識網上的舊知識點,打上了結點。又學習了通過對象模型來實現對數據庫的操作,進一步的了解了面向對象的精神所在,跟當初學習設計模式一樣,一切的一切都是在對象的基礎上,實現簡單方便快捷又可易維護的方法,受益匪淺,期待進一步的了解和探索。