本文為博主原創,允許轉載,但請聲明原文地址:http://www.coselding.cn/blog/8/8-140.html 1、關系映射: A.一對一:主鍵關聯:主鍵關聯 單向:外鍵關聯 雙向:外鍵關聯或中間表 聯合主鍵: @OneToOne:一對一關聯關系,注解在對方類引用的get方法上 @Join
本文為博主原創,允許轉載,但請聲明原文地址:http://www.coselding.cn/blog/8/8-140.html
1、關系映射:
A. 一對一:主鍵關聯:主鍵關聯
單向:外鍵關聯
雙向:外鍵關聯或中間表
聯合主鍵:
@OneToOne:一對一關聯關系,注解在對方類引用的get方法上
@JoinColumn:設置關聯的外鍵名,name屬性
@PrimaryKeyJoinColumn:設置主鍵關聯
@JoinColumns設置聯合主鍵
xml使用
B. 一對多:一方添加多方的Set集合
注解:@OneToMany和@JoinColumn指定多方的外鍵名
Xml:
C. 多對一:在多方加外鍵
注解:@ManyToOne
Xml:
注:一對多、多對一的雙向關系,交給多方維護關系,在@OneToMany設置mappedBy
屬性,xml在
D. 多對多:
單向:
注解:在維護集合上@ManyToMany,@JoinTable指定中間表名和列名,
JoinColumns、JoinColumn、inverseJoinColumn
Xml:
雙向:
注解:單向的基礎上在另一邊的集合設置@ManyToMany(mappedBy="")
Xml:另一邊也設置
E. 組件映射:作為表的一部分的Bean,不作為實體,如學生證作為學生實體的一部分;
實體中的組件引用加@Embedded
Xml中用
注:(1)雙向關聯mappedBy屬性必須設定,xml用
表示關系由對方主導;
(2)雙向關系要很注意在調用過程中可能出現實體無限循環調用的堆棧溢出的危險;
2、關聯關系下的增刪改查:
(1) 關聯關系設置cascade級聯操作,只影響增刪改;
(2) 若被關聯對象為一方,默認直接取出來,EAGER;
(3) 若被關聯對象為多方,默認是延遲加載,LAZY;
(4) fetch設置查詢讀取級聯操作,只影響查詢操作,默認LAZY;
(5) 雙向的關聯關系有些操作會導致重復操作,注意設置延遲加載避免多余操作;
(6) 刪除:先查詢再刪除,防止級聯刪除--破壞掉內存實體的關聯關系或HQL;
3、集合映射:
(1) 常規方式:Set;
(2) List:加注解和Set一樣,List是為了能夠排序,@OrderBy指定排序參數;
(3) Map:key為不可重復子段(多數為主鍵),@MapKey;value為集合元素實體,較適用于查詢;
4、繼承映射:
(1) 少數屬性繼承關系:Single-Table,一張表存儲所有類,加一個類型標記位子段;
(2) 每個類各自一張表:Table-per-Class,沒法存儲繼承多態關系,繼承多態調用麻煩,需要維護每個實體主鍵的唯一性;
(3) 按照繼承關系,父類有表,子類也有表,但是共同屬性在父表中:Joined,父表和子表要設置主鍵關聯,維護主鍵唯一性,查詢必須連接表,新子類要建新表;
注解:A. @Inheritance:注明繼承映射,指定繼承映射策略,用于父類;
B. @DiscriminatorColumn:標明類的類型標記位,用于父類;
C. @DiscriminatorValue("標記位值"):類類型標記位值;
5、樹狀映射:
(1)對象設計:id、父親節點引用、孩子節點集合、其他的節點內容;
(2)表設計:id、parent_id、其他節點內容列;
(3)設置@Entity、@Id、主鍵生成策略、@ManyToOne(設置外鍵列"parent_id")、@OneToMany(mappedBy="parent");
(4)設置修改級聯,LAZY還是EAGER具體分析才選擇;
(5)設置好對象間父子關系,存入數據庫即可;
(6)查詢使用遞歸方式查詢;
本文為博主原創,允許轉載,但請聲明原文地址:http://www.coselding.cn/blog/8/8-140.html
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com