主鍵關聯和外部索引鍵關聯類似,只需要將對應的註解稍作修改即可,主鍵關聯用的很少。
1、寫Husband.java類,並在其中添加對Wife的引用,同時註解。
package com.hibernate._0800_one2one_uni_pk;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;import javax.persistence.PrimaryKeyJoinColumn;@Entitypublic class Husband {private Integer id;private String name;private Wife wife; //去參考wife的id,此時wife必須先id@Id@GeneratedValuepublic Integer getId() {return id;}public String getName() {return name;}@OneToOne //設定關聯關係@PrimaryKeyJoinColumn(name="wifeId") //@PrimaryKeyJoinColumn用主鍵來做串連,指定資料庫中的名字,預設為wife_idpublic Wife getWife() {return wife;}public void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}public void setWife(Wife wife) {this.wife = wife;}}
@PrimaryKeyJoinColumn 設定用主鍵來做串連
2、寫Wife.java類
package com.hibernate._0800_one2one_uni_pk;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.OneToOne;@Entitypublic class Wife {private Integer id;private String name;private Husband husband;/** mappedBy="wife"中的這個wife是Husband中的wife屬性,表示Husband起主導作用如果不加,在資料庫中Wife表中會產生husband_id這個冗餘欄位*/@OneToOne(mappedBy="wife") public Husband getHusband() {return husband;}@Id @PrimaryKeyJoinColumn(name="husbandId") //加上這個註解就變成一對一雙向主鍵關聯 public Integer getId() {return id;}public String getName() {return name;}public void setHusband(Husband husband) {this.husband = husband;}public void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}}
設定mappedBy屬性,mappedBy="wife"中的這個wife是Husband中的wife屬性,表示Husband起主導作用如果不加,在資料庫中Wife表中會產生husband_id這個冗餘欄位
3、XML中的配置。
單向主鍵關聯時,
Husband.hbm.xml檔案中配置如下:
<id name="id"><generator class="foreign"><param name="property">wife</param> <!-- 這個值wife --></generator> <!--不寫貌似也沒關係,但最好還是class="" 值最好設為foreign--></id><property name="name" /><one-to-one name="wife" constrained="true"/> <!-- 加上constrained="true"來設定外鍵約束 -->
Wife.hbm.xml 中的配置如下;
<id name="id"> <generator class="native"></generator></id><property name="name" />
雙向主鍵關聯時,
Husband.hbm.xml檔案中配置如下:
<id name="id"><generator class="native"></generator></id><property name="name" /><one-to-one name="wife" property-ref="husband"/>
Wife.hbm.xml 中的配置如下;
<id name="id"><generator class="native"></generator></id><property name="name" /><one-to-one name="husband" constrained="true"/>