今天看着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>
之后就可以通過一系列的操作實現我們的需求了!