Hibernate注解(二):關聯關系映射注解


關聯關系映射注解
以下項目均在之前相應代碼的基礎上進行的修改。這些項目均需要做的是:
 刪除映射文件
 在hibernate.cfg.xml中注冊實體類
 注解的重要位置在實體類中關聯屬性上。這里是關聯關系的體現。

(1)一對多單向關聯

舉例:項目annotation_one2many_s
@OneToMany表明是一對多關聯關系。
@JoinColumn指明該屬性所關聯的外鍵。

 targetEntity:指明該屬性所關聯的類。
 cascade:指定級聯類型。其為數組,使用多種級聯,則可使用{ }賦值。其值為Cascade常量:

對於一對多單向關聯關系的多方,由於其不具備維護關聯關系的能力,即沒有一方對象作為屬性,所以這里是不用設置關聯相關的注解的。

(2)一對多雙向關聯

舉例:項目annotation_one2many_d
這其中增加了mappedBy屬性。

mappedBy屬性用法:
 該屬性與關聯關系的維護權相關。
 該屬性應放在放棄維護權一方。
 該屬性值為對方的關聯屬性,表明以后的關聯關系將由它來負責。
 使用該屬性的注解,無需也不能再設置cascade屬性。
 該屬性只可能在雙向關聯中使用。
 使用了該屬性,將不能再使用@JoinColumn注解。因為@JoinColumn注解表示其所注解的屬性將來通過set方法設值后,會與DB中哪個字段相關聯。
mappedBy屬性表示當前注解的關聯屬性放棄了維護權,即使執行了set方法將值設置入,其也不會寫入到DB中。
也正因為放棄了維護權,與DB無關了,所以設置了mappedBy屬性的注解,再設置cascade也就無意義了。
一個是使被注解者與DB相關,一個是使被注解者放棄與DB的關系,它們是相互矛盾的。

(3)自關聯

(4)多對一單向關聯

 

 

(5)多對多單向關聯

舉例:annotation_many2many_s
多對多關聯使用@ManyToMany注解。其會自動生成一個中間表,表名為兩個關聯對象的映射表名的聯合:表1_表2。該表包含兩個字段,字段名也與表名相關。字段名分別為:表1_id與表2_id。當然,默認的表名與字段名均可通過@JoinTable進行修改(不研究)。

(6)多對多雙向關聯

 


免責聲明!

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



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