hibernate 單向關聯&雙向關聯

多對一:

就是A表中的一個字段是B表的主鍵。多個A表中的數據可以對應一個B表中的數據,同理,一個B表中的數據可以同時對應多個A表中的數據。

 

單向關聯與雙向關聯對數據表的要求其實是一致的。滿足對應的關聯要求即可,也就是A表中的一個字段是B表中的主鍵。

單向關聯與雙向關聯的需求是不一樣的。單向關聯,只需要可以通過主表找到控表即可。這個很簡單,通過簡單的sql語句,select B from A where A.B=?即可。需要的配置也很簡單,在A表的持久化類的映射文件中加入:

<class ......>
   <id....>
   ......
   <many-to-one name="B" class="com.bean.B">
       <column name="B"/>  <!--這個B是A表中B表的主鍵對應的外鍵名-->
   </many-to-one>
</class>

雙向關聯的需求是:能夠通過A表找到B表,通過B表找到A表。怎麼實現呢?

我們可以知道,單存的B表數據找到的是一批A表的數據,也就是A表數據對象的集合,當然,改變的不是數據庫中的表,而是持久化類。B表的持久化類中加入一個A表的Set集合,將查詢到的與B有關的數據放入該集合中,之後就可以通過其他的條件得到我們想要的對應A的信息了。

做法:

1、B持久化類中飯加入A的set集合以及對應get set方法

2、在B表的映射文件中加入Set信息以及一對多信息:

<set name="As" inverse="true">
  <key column="B.id"/>
  <on-to-many class="com.bean.A"/>
</set>

即可。

設置inverse屬性只是設置維護關係而已,不是單向關聯。單向關聯是你在A類裏面,可以訪問到B類數據,藉此就訪問到B表的數據,但是在B類裏面無法訪問A類的數據,也就是訪問不到A表的數據。雙向是在B類裏也可以訪問A的數據。至於什麼時候用,要看需要了,比如:班級表和學生表,對應的java類是班級類和學生類,假如我在顯示學生信息的時候需要同時顯示其所屬的班級信息,那麼就可以建立學生類到班級類的單向關聯,如果我還想在顯示班級基本信息的同時顯示其所對應的學生信息,那麼這時就可以建立雙向關聯了。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章