Address 主鍵同時是外鍵指向 Person。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...
}
<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>
<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);。