1. 程式人生 > >java關係對映之程式碼表示

java關係對映之程式碼表示

所有的單向和雙向在資料庫中麼有區別,但是在程式碼兩個實體之間有區別。
                                        
                                         一對一關聯
 
1.一對一的單向主鍵關聯(不重要):
例如兩張表:Husband和wife,在資料庫中設定彼此的主鍵id相互關聯(少用)
此時在兩個實體類中不用新增任何的物件屬性
2.一對一的單向外來鍵關聯
例如兩張表:Husband和wife
***在設計實體類時建立聯絡:
物件模型:只在Husband類中新增屬性private Wife wife;並生成getter和setter方法,
         如果不使用多表關聯查詢HQL語句,那麼要進行多表查詢需在Husband實體類中再新增private 

int wifeid;屬性,
         這也是傳統做法
關係模型:以Wife表為主導:
         在Husband表中新增一個欄位wifeid,該欄位與wife表中的id建立關聯關係
或者:
物件模型:只在Wife類中新增屬性private Husband husband;並生成getter和setter方法,
         如果不使用多表關聯查詢HQL語句,那麼要進行多表查詢需在Wife實體類中新增private int 

husbandid;屬性,這也是傳統做法
關係模型:以Husband表為主導:
         在wife表中新增一個欄位husbandid,該欄位與husband表中的id建立關聯關係
3.一對一的雙向外來鍵關聯
物件模型:在Husband類中新增屬性private Wife wife;並生成getter和setter方法,同時在
         在Wife類中新增屬性private Husband husband;並生成getter和setter方法
關係模型:兩種主導關係建立任意一種即可,不必兩種主導關係同時建:
         以Wife表為主導:在Husband表中新增一個欄位wifeid,該欄位與wife表中的id建立關聯關係

或者
         以Husband表為主導:在wife表中新增一個欄位husbandid,該欄位與husband表中的id建立關

聯關係
         
4.一對一雙向主鍵關聯----(不重要,此處不再介紹)

-------------------------------------------------------------------------------------------

---
總結:一對一單向和雙向在資料庫中的表現是一樣的,區別體現在java程式中,單向只能找一次,雙向

可以相互找到
-------------------------------------------------------------------------------------------

---
 
                                 一對多和多對一關聯 ---- 原則:在多方新增外來鍵
  兩張表:user表和group表
1.多對一的單向關聯:
物件模型:根據在多方新增外來鍵的構思:在多方User類中新增屬性:private Group group;
關係模型:在user表中新增groupid欄位,該欄位和group表中的id關聯
2.一對多的單向關聯:
物件模型:在一的一方設定多方的集合屬性:即在group中設定:private Set<User> users = new 

HashSet<User>();//此處最適合使用set集合,因為不會重複
關係模型:和多對一在資料庫的表現一致,同樣遵循在多方設定外來鍵的思想,即在user表中新增groupid

欄位,該欄位和group表中的id關聯
3.多對一(一對多)的雙向關聯:
物件模型:在單方新增集合屬性,在多方新增物件屬性
關係模型:和單向在資料庫的表現一致,同樣遵循在多方設定外來鍵的思想,即在user表中新增groupid字

段,該欄位和group表中的id關聯
-------------------------------------------------------------------------------------------

---
總結:資料庫表現相同並遵循一個原則:在多方設定外來鍵
一對多或者多對一的雙向關聯很少用,一般使用單向關聯即可,即在多的一方設定聯絡,
-------------------------------------------------------------------------------------------

---

                                            多對多關聯 --- 增加中間表
  兩張表:teacher表和student表
1.多對多單向關聯:
物件模型:在其中某一個實體類中設定set集合屬性
關係模型:增加中間表,包含studentid和teacherid,並分別向兩張表做關聯
2.多對多雙向關聯:
物件模型:在兩個實體類中均設定set集合屬性
關係模型:和單向關聯在資料庫表現一致,增加中間表,包含studentid和teacherid,並分別向兩張表

做關聯
-------------------------------------------------------------------------------------------

----
總結:在資料庫表現一致:增加中間表,類中設定set集合
-------------------------------------------------------------------------------------------

----

-----------之前的BBS專案中資料庫表設計:
新聞表和評論表:
             1.如果要先查詢新聞再查詢評論,則確定兩張表為一對多關係
             2.如果想在查詢評論的時候查詢它屬於哪個新聞,則確定關係為多對一
到底是一對多還是多對一對在資料庫中的表現沒有影響,都是在多方設定外來鍵,但是在java類中的表現

不同,
是在一方新增set集合屬性,還是在多方新增物件屬性,這取決於關聯關係,既然雙向,單向在資料庫中

表現一致,
那麼在java類中建議設定成雙向關聯。

--------------------------------------------------------------------
假如Group和User之間是一對多的雙向關聯,那麼應該在User中設定Private Group group;
同時在Group中設定:private Set<User> users = new HashSet<>();
然後就可以:
User user1 = new User("張三",21);
User user2 = new User("李四",20);
Group group = new Group();
group.getUsers().add(user1);
group.getUsers().add(user2);
然後建立集合List,list中每個元素為Group,查詢即可。