日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Hibernate 一对一关联关系

發布時間:2025/6/17 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 一对一关联关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙向一對一關聯關系:

域模型:

  例如,部門只有一個部門經理,一個經理也只能管理一個部門。即,Department 中有一個Manager的引用,Manager 中又有一個Department 的引用。

關系數據模型:

  按照主鍵映射: 這種方式跟 多對一關聯關系非常相似,比如department 表有一個外鍵 MANAGER_ID 指向manager 表的ID, 此時Department 和 Manager 對應的這兩張表是多對一的關聯關系,為了實現一對一的關聯關系,只要給 外鍵 MANAGER_ID 加上一個唯一約束,則可以實現一對一關聯關系。

    需要注意的問題:

    ①、保存:建議先保存沒有外鍵列的那一端的對象。

    ②、查詢:默認情況下使用懶加載異常。

    ③、沒有外鍵的一端需要使用?one-to-one 元素,該元素使用property-ref 屬性指定使用 被關聯實體主鍵以外的字段作為關聯字段。

    ④、在查詢沒有外鍵關聯的一端對象的時候,使用左外連接一并查詢出其關聯的對象,并進行初始化。

      也就是說:把懶加載屬性設為true 的時候,查詢 Manager 會一并把Department 查詢出來,但是查詢Department 并不會把Manager對象查詢出來。

  按照外鍵映射:

    擁有外鍵的一端生成主鍵的方式要注意,不是使用 native ,而是使用 foreign

?

    示例:

    實體類按照主鍵映射的一樣,區別在于映射文件。這里將映射文件代碼貼出來。

Department類的映射文件

<class name="com.zcd.hibernate.oneToOnePrimary.Department" table="DEPARTMENT"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="foreign" > <!-- 生成主鍵的方式 --><param name="property">manager</param> <!-- 還要指定根據。。。 --></generator></id><property name="name" type="java.lang.String"><column name="NAME" /></property><one-to-one name="manager" class="com.zcd.hibernate.oneToOnePrimary.Manager" constrained="true"></one-to-one></class>

?

Manager的映射文件

<class name="com.zcd.hibernate.oneToOnePrimary.Manager" table="MANAGER"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><one-to-one name="department" class="com.zcd.hibernate.oneToOnePrimary.Department"></one-to-one></class>

不管先插入哪一個對象,都會先發送被拿主鍵來作為他人外鍵的那個對象的插入SQL語句,比如這里不管先插入Department 還是Manager,都會先發送插入Manager 的SQL語句。

?

?

有一個疑問:下面的代碼為什么會保存兩次 Manager 對象呢?

@Testpublic void testDepartmentAndManager(){Department department = new Department();department.setName("研發部");Manager manager = new Manager();manager.setName("BB");department.setManager(manager);manager.setDepartment(department);oneToOnePrimaryService.saveDepartment(department);oneToOnePrimaryService.saveManager(manager);}

?

Hibernate 一對一關聯關系,使用外鍵映射和使用主鍵映射的區別:

目前發現的一點區別如下,以后發現了在進行添加。

?

?外鍵映射主鍵映射
生成主鍵方式

使用native

?

<generator class="native" />

?

使用foreign還有

<generator class="foreign" ><param name="property">company</param> </generator>

?

??使用many-to-one?加上unique屬性,另一端不需要修改,按自動生成的使用?使用one-to-one,加上contrained="true"屬性,另一端不需要修改,按自動生成的使用

轉載于:https://www.cnblogs.com/GooPolaris/p/7919416.html

總結

以上是生活随笔為你收集整理的Hibernate 一对一关联关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。