1. Hibernate Annotation關係映射有下面幾種類型: 1)一對一外鍵關聯映射(單向) 2)一對一外鍵關聯映射(雙向) 3)一對一主鍵關聯映射(不重要)在這不演示 在實際中不多用,使用註解@PrimaryKeyJoinColumn 意思是說,個人主鍵去參考另一張表中的主鍵,做爲個人主鍵,可是在我測試使用 註解一對一主鍵關聯映射,在生成表的時候,數據庫中並無生成關聯,使用XML 映射能夠生成。Annotation註解一對一主鍵關聯映,有些bug。不過沒空去研究它。 由於在實際開發中一對一不多用。在實際開發中我機會沒有用過,主鍵關聯就更少了 4)多對一關聯映射 5)一對多關聯映射(單向) 6)一對多關聯映射(雙向) 7)多對多關聯映射(單向) 8)多對多關聯映射(雙向) 2.介紹各類映射用法 1)一對一外鍵關聯映射(單向) @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="userid",unique=true) //一對一外鍵關聯,使用@OneToOne,並設置了級聯操做 //@JoinColum設置了外鍵的名稱爲userid(數據庫字段名),若是不設置,則默認爲另外一類的屬性名+ _id //外鍵的值是惟一的(unique),不可重複,與另外一類的主鍵一直 2)一對一外鍵關聯映射(雙向) Class1裏與上面同樣, Class2: @OneToOne(mappedBy="class2",cascade=CascadeType.ALL) //一對一雙向關聯關係,使用@OneToOne //注意:須要加上mappedBy="class2",若是不加上的話, //Class2也會生成一個外鍵(class1_id) //mappedby="class2"須要指向與他關聯對象的一個屬性 //說明雙向關聯關係中,有且僅有一端是做爲主體(owner)端存在的 //主體端負責維護聯接列 //對於不須要維護這種關係的從表則經過mappedBy屬性進行聲明 //mappedBy的值指向主體的關聯屬性 //規律:只有是雙向關聯關係,都加上mappedby //cascade=CascadeType.ALL級聯 4)多對一關聯映射 在多的一端配置: @ManyToOne(targetEntity=Organization.class) @JoinColumn(name="orgid") //多對一註解@ManyToOne //targetEntity指定了關聯對象 //@JoinColumn(name="orgid")指定生產的外鍵的字段名,默認是org_id 5)一對多關聯映射(單向) @OneToMany @JoinColumn(name="orgid") /** * 一對多註解@OneToMany(單向) * 若是隻寫@OneToMany的話,hibernate會建一張中間表來 * 維護他們之間的關係, * 加上@JoinColumn(name="orgid"),則不會建中間表,他會在 * 多的一端加上外鍵orgid,來維護他們之間的關係 */ 6)一對多關聯映射(雙向) 一端: @OneToMany(mappedBy="org") @JoinColumn(name="orgid") /** * 一對多雙向,在一的一端中設置mappedBy * 說明多的一端爲主導 * 若是指定了外鍵字段名稱,則多的一端也須要指定相同的字段名稱 */ 多端: @ManyToOne @JoinColumn(name="orgid") /** * 一對多雙向 * 須要指定外鍵與一的一端給的外鍵名稱一致,@JoinColumn(name="orgid") * 也能夠不指定,若是在多的一端不指定,則一的一端也不能指定 * 不然爲生成兩個外鍵 */ 7)多對多關聯映射(單向) @ManyToMany /** * 多對多映射:註解@ManyToMany(單向) * 默認狀況下,hibernate會自動的建立一張中間表, * 來維護多對多關係 * 默認中間表的名稱 :user_role中間表,字段的名稱user_id role_id * 若是想更換表名和字段名稱,註解以下: */ @JoinTable(name="t_u_r", joinColumns={@JoinColumn(name="u_id")}, inverseJoinColumns={@JoinColumn(name="r_id")} ) 8)多對多關聯映射(雙向) User端 @ManyToMany /** * 多對多映射:註解@ManyToMany(單向) * 默認狀況下,hibernate會自動的建立一張中間表, * 來維護多對多關係 * 默認中間表的名稱 :user_role中間表,字段的名稱user_id role_id * 若是想更換表名和字段名稱,註解以下: */ @JoinTable(name="t_u_r", joinColumns={@JoinColumn(name="u_id")}, inverseJoinColumns={@JoinColumn(name="r_id")} ) /** * @JoinTable(name="t_u_r", * 指定中間表的表名 * joinColumns={@JoinColumn(name="u_id")}, * 指定當前對象的外鍵 * inverseJoinColumns={@JoinColumn(name="r_id")} * 指定關聯對象的外鍵 */ Role端 @ManyToMany(mappedBy="role") /** * 多對多,雙向關聯映射 */