關聯關系映射注解
以下項目均在之前相應代碼的基礎上進行的修改。這些項目均需要做的是:
刪除映射文件
在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)多對多雙向關聯