OneToOne主键关联

首先来看表的关系:

表1:

Husband

husband_id<<pk>>

name


表2

Wife

wife_id <<pk>><<fk>>
name



Husband类

@Entity
public class Husband {
	@Id
	@GeneratedValue
	private int id;
	private String name;
	@OneToOne(cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private Wife wife;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Wife getWife() {
		return wife;
	}

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

}

 

Wife类

@Entity
public class Wife {
	@Id
	@GeneratedValue(generator = "myForeignGenerator")
	@org.hibernate.annotations.GenericGenerator(name = "myForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "husband"))
	private int id;
	private String name;
	@OneToOne(optional = false, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private Husband husband;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Husband getHusband() {
		return husband;
	}

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

 

wife类中的

@Id
 @GeneratedValue(generator = "myForeignGenerator")
 @org.hibernate.annotations.GenericGenerator(name = "myForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "husband"))
 private int id;

 

定义了外键的生成策略,这样可以在级联插入时保持husband的主键和wife的外键(也是主键)相同。

 

@Test
	public void testOneToOnePK() {
		OneToOne.PK.Husband husband = new OneToOne.PK.Husband();
		OneToOne.PK.Wife wife = new OneToOne.PK.Wife();
		husband.setName("me");
		wife.setName("mywife");

		wife.setHusband(husband);
		session.beginTransaction();
		session.save(wife);//级联插入husband
		// session.save(husband);
		session.getTransaction().commit();
	}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值