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

Hibernate 進階(五):一對一單向關聯映射實戰指南

     編輯:Java 相關知識

關系映射分類回顧

關系映射處理多個對象與表之間的關聯,共七類:
一對一單向、一對一雙向、一對多單向、多對一單向、一對多雙向、多對多單向、多對多雙向。
本章專講一對一單向關聯。

單向關聯特徵

• Person 持有 IdCard 引用
• IdCard 不持有 Person 引用
• 只能從 Person 導航到 IdCard,反向不可行

實體類定義

單向關聯類圖

public class Person {
    private int id;
    private String name;
    private IdCard idCard; // 單向引用
    // getter/setter
}

public class IdCard {
    private int id;
    private String cardNo;
    // 無 Person 引用
    // getter/setter
}

兩種映射策略

1. 主鍵關聯

主鍵關聯表結構

Person 表主鍵同時是指向 IdCard 的外鍵,值相同。

<class name="com.zs.hibernate.IdCard" table="t_idCard">
    <id name="id"><generator class="native"/></id>
    <property name="cardNo"/>
</class>

<class name="com.zs.hibernate.Person" table="t_person">
    <id name="id">
        <generator class="foreign">
            <param name="property">idCard</param>
        </generator>
    </id>
    <property name="name"/>
    <one-to-one name="idCard" constrained="true"/>
</class>

2. 唯一外鍵關聯

唯一外鍵關聯表結構

Person 表額外加一個唯一外鍵列 idCard_id 指向 IdCard 主鍵。

<class name="com.zs.hibernate.IdCard" table="t_idCard">
    <id name="id"><generator class="native"/></id>
    <property name="cardNo"/>
</class>

<class name="com.zs.hibernate.Person" table="t_person">
    <id name="id"><generator class="native"/></id>
    <property name="name"/>
    <many-to-one name="idCard" unique="true"/>
</class>

註解配置提示

同基本映射,可用 @OneToOne + @JoinColumn(unique=true) 或 @MapsId 實現,建議查閱官方文檔或專書深入學習註解細節。

核心差異對比

維度主鍵關聯唯一外鍵關聯
表結構共享主鍵,Person 無額外 FK 列Person 有唯一 FK 列
生成器Person 用 foreign 生成器雙方用 native 獨立生成
約束constrained="true" 強制外鍵unique="true" 保證一對一
適用場景強綁定、生命周期一致較鬆散、可選關聯

下一章將講解一對一雙向關聯映射,敬請期待。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved