1. 程式人生 > >hibernate註解實現一對一雙向外來鍵關聯

hibernate註解實現一對一雙向外來鍵關聯

一對一雙向外來鍵關聯

1、主控方的配置同一對一單向一樣不用更改

2、在被控方設定關聯物件的屬性引用上加上@OneToOne主鍵

3、雙向關聯,必須要有mappedBy屬性(mappedBy的意思是由對方主導關聯關係

注意:自動生成表時會在兩張表上都加入外來鍵關聯關係,可以通過沒置mappedBy來解決

1、建立實體類Person並新增idCard引用

package cn.yinghuo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

/**
 * 雙向外來鍵關聯
 * 主控方
 */

	@Entity
	public class Person {
		public String pid;
		public String pname;
		public IdCard idCard;

	@Id //主鍵
	@GeneratedValue(generator="uuid")  //指定一個生成器為uuid
	@GenericGenerator(name = "uuid", strategy ="uuid") //構建一個生成器,生成策略strategy為手工賦值
	public String getPid() {
		return pid;
	}
	public void setPid(String pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	
	@OneToOne //全級聯的級聯關係
	@JoinColumn(name="cid") //被控類對應的主鍵為cid
	public IdCard getIdCard() {
			return idCard;
		}
	public void setIdCard(IdCard idCard) {
			this.idCard = idCard;
		}
}

2、建立實體類idCard並新增Person引用

package cn.yinghuo.model;
/**
 * 雙向外來鍵關聯
 * 被控方
 */
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

	@Entity
	public class IdCard {
		public String cid;
		public String cname;
		public Person person;
@Id // 主鍵 @GeneratedValue(generator="uuid") //指定一個生成器為uuid @GenericGenerator(name = "uuid", strategy ="uuid") //構建一個生成器,生成策略strategy為手工賦值 public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } @OneToOne(mappedBy="idCard")
public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }

3、建立測試類

package cn.yinghuo.action;
/**
 * 測試類
 */
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class Main {
	public static void main(String[] args) {
		schemaExport();
	}
	
	// schemaExport()生成資料庫表
	// 第一個true是在控制檯打印出DDL,如果是false沒什麼影響只是不再打印出DDL(資料庫定義語言)
	// 第二個true是建立表,反之false則不建立
	public static void schemaExport() {
		new SchemaExport(new Configuration().configure()).create(true, true);
	}
}

4、在XML中引入對映檔案

<mapping class="cn.yinghuo.model.Person" />
<mapping class="cn.yinghuo.model.IdCard" />