hibernate單向關聯與雙向關聯的區別(原)


今天看着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>

之后就可以通過一系列的操作實現我們的需求了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM