首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 一對一關聯映射:主鍵關聯與唯一外鍵關聯實戰

     編輯:Java 相關知識

兩種映射策略

  1. 主鍵關聯 (Primary Key Association):雙方共享同一主鍵值,Address 主鍵同時是外鍵指向 Person。
  2. 唯一外鍵關聯 (Unique Foreign Key):Person 表含 address_id 列,加唯一約束。

本文示範主鍵關聯(雙向)。

領域模型

// 主控方 Person
public class Person {
    private Long id;
    private String username;
    private Address address; // 一對一引用
    // getter/setter...
}

// 被動方 Address
public class Address {
    private Long id; // 同 Person id
    private String addressName;
    private Person person; // 反向引用
    // getter/setter、equals/hashCode...
}

映射文件

Person.hbm.xml

<class name="Person" table="person">
    <id name="id" column="id">
        <generator class="native"/>
    </id>
    <property name="username" column="username"/>
    <one-to-one name="address" class="Address" cascade="all" constrained="false"/>
</class>

Address.hbm.xml

<class name="Address" table="address">
    <id name="id" column="id">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>
    </id>
    <property name="addressName" column="address_name"/>
    <one-to-one name="person" class="Person" constrained="true"/>
</class>

關鍵點解析

  • constrained="false" (Person 端) 表示不強制要求 Address 必須存在;constrained="true" (Address 端) 表示 Address 必須關聯有效 Person。
  • generator class="foreign" 配合 <param name="property">person</param> 實現主鍵值由關聯對象生成。
  • cascade="all" 實現保存/刪除級聯。
  • 雙向關聯需在雙邊維護引用:person.setAddress(address); address.setPerson(person);。

適用場景

  • 主鍵關聯:兩端生命週期強綁定、數據量較小、查詢常聯合讀取。
  • 唯一外鍵:主表可選擇性關聯從表、從表可能被多主表引用(雖一對一加唯一約束較少見)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved