Hibernate One-to-One(共享主键)

package com.hibernate.ano;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

/**
 * @ClassName: Husband.java
 *
 * @Description: 丈夫
 *
 * @author GERRARD
 *
 * @date 2015年1月26日下午1:39:43
 * 
 */
@Entity
@Table(name = "husband")
public class Husband implements java.io.Serializable {
	
	/**
	 * 序列化
	 */
	private static final long serialVersionUID = -3565511189578786963L;

	/**
	 * 主键ID
	 */
	private String pid;
	
	/**
	 * 姓名
	 */
	private String husbandName;
	
	/**
	 * 妻子
	 */
	private Wife wife;

	public Husband() {

	}

	public Husband(String pid, String husbandName, Wife wife) {
		this.pid = pid;
		this.husbandName = husbandName;
		this.wife = wife;
	}

	/**
	 * 自动32位UUID
	 * @return
	 */
	@Id
    @Column(name = "pid", unique = true, nullable = false, length = 32)
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "uuid")
	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	@Column(name = "husband_name", length = 64)
	public String getHusbandName() {
		return husbandName;
	}

	public void setHusbandName(String husbandName) {
		this.husbandName = husbandName;
	}

	/**
	 * FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
	 * 
	 * FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
	 * 
	 * mappedBy = "husband"  映射实体Wife中的husband属性(属性名要等于这个名)
	 */
	@OneToOne(fetch = FetchType.LAZY, mappedBy = "husband")
	public Wife getWife() {
		return wife;
	}

	public void setWife(Wife wife) {
		this.wife = wife;
	}

}

 

package com.hibernate.ano;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;

/**
 * @ClassName: Wife.java
 *
 * @Description: 妻子
 *
 * @author GERRARD
 *
 * @date 2015年1月26日下午1:39:30
 * 
 */
@Entity
@Table(name = "wife")
public class Wife implements java.io.Serializable {

	/**
	 * 序列化
	 */
	private static final long serialVersionUID = 8177241922775766920L;

	/**
	 * 主键ID(共享丈夫)
	 */
	private String pid;
	
	/**
	 * 姓名
	 */
	private String wifeName;
	
	/**
	 * 丈夫
	 */
	private Husband husband;

	public Wife() {
		
	}

	public Wife(String pid, String wifeName, Husband husband) {
		this.pid = pid;
		this.wifeName = wifeName;
		this.husband = husband;
	}

	/**
	 * 共享丈夫主键ID
	 * 
	 * @return
	 */
	@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "husband"))
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "pid", unique = true, nullable = false, length = 32)
	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	@Column(name = "wife_name", length = 64)
	public String getWifeName() {
		return wifeName;
	}

	public void setWifeName(String wifeName) {
		this.wifeName = wifeName;
	}

	/**
	 * PrimaryKeyJoinColumn:使用主键作为关联字段
	 * 
	 * @return
	 */
	@OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
	public Husband getHusband() {
		return husband;
	}

	public void setHusband(Husband husband) {
		this.husband = husband;
	}
	
	
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值