博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十章 基于Annotation的关系映射 一对一
阅读量:6242 次
发布时间:2019-06-22

本文共 3382 字,大约阅读时间需要 11 分钟。

 

如果下面部分内容有不明白的可以查找:

基于Annotation的关系映射 前期准备:

基于映射文件共享主键方式实现一对一

基于映射文件唯一外键式实现一对一:

1、共享主键方式:

 

Person:

@Entity@Table(name = "person", catalog = "hibernate")public class Person implements java.io.Serializable {	private Integer id;	private String name;	private IdCard idCard;	public Person() {	}	@Id	@GeneratedValue	@Column(name = "id", unique = true, nullable = false)	public Integer getId() {		return this.id;	}	public void setId(Integer id) {		this.id = id;	}	@Column(name = "name", nullable = false, length = 45)	public String getName() {		return this.name;	}	public void setName(String name) {		this.name = name;	}	@OneToOne(cascade = CascadeType.ALL)	@PrimaryKeyJoinColumn // 这个注解只能写在主(生成ID)的一端,指向从表	public IdCard getIdCard() {		return idCard;	}	public void setIdCard(IdCard idCard) {		this.idCard = idCard;	}}

 

 

IdCard:

@Entity@Table(name = "id_card", catalog = "hibernate")public class IdCard implements java.io.Serializable {	private Integer id;	private Person person;	private String cardNo;	public IdCard() {	}	@Id	@GenericGenerator(name = "abc", strategy = "foreign", parameters = { @Parameter(name = "property", value = "person") })	@GeneratedValue(generator = "abc")	@Column(name = "id", unique = true, nullable = false)/*      与映射文件相比较:         
person
*/ public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "id", unique = true, nullable = false, insertable = false, updatable = false) public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } @Column(name = "card_no", nullable = false, length = 45) public String getCardNo() { return this.cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; }}

 

测试与使用和基于映射文件基本一样:

2、唯一外键方式

Person:

@Entity@Table(name = "person", catalog = "hibernate")public class Person implements java.io.Serializable {	private Integer id;	private String name;	private IdCard idCard;	public Person() {	}	@Id	@GeneratedValue	@Column(name = "id", unique = true, nullable = false)	public Integer getId() {		return this.id;	}	public void setId(Integer id) {		this.id = id;	}	@Column(name = "name", nullable = false, length = 45)	public String getName() {		return this.name;	}	public void setName(String name) {		this.name = name;	}	@OneToOne(cascade = CascadeType.ALL,mappedBy="person")     //
与之前的映射文件比较 //当指定person中的mappedBy后,关系只能被idcard来主动维护 public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; }}

 

IdCard:

@Entity@Table(name = "id_card", catalog = "hibernate")public class IdCard implements java.io.Serializable {	private Integer id;	private Person person;	private String cardNo;	public IdCard() {	}	@Id	@GeneratedValue	@Column(name = "id", unique = true, nullable = false)	public Integer getId() {		return this.id;	}	public void setId(Integer id) {		this.id = id;	}	@OneToOne(cascade = CascadeType.ALL)	@JoinColumn(name = "person_id", unique = true)/*  比较:	
*/ public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } @Column(name = "card_no", nullable = false, length = 45) public String getCardNo() { return this.cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; }}

测试与使用和基于映射文件基本一样:

 

 

转载地址:http://yssia.baihongyu.com/

你可能感兴趣的文章
在Linux下配置git并设置远程仓库
查看>>
[解题报告]499 - What's The Frequency, Kenneth?
查看>>
Vue入门---常用指令详解
查看>>
iOS 越狱后 SSH 不能连接
查看>>
soj 3291 Distribute The Apples II DP
查看>>
苹果App Store审核指南中文翻译(更新至140227)
查看>>
转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
查看>>
原来对MFC一无所知
查看>>
Java程序员看C++代码
查看>>
python处理Excel - xlrd xlwr openpyxl
查看>>
JS实现的购物车
查看>>
bzoj 3998 [TJOI2015]弦论——后缀自动机
查看>>
STL 的 vector 根据元素的值来删除元素的方法
查看>>
NOI2002银河英雄传说——带权并查集
查看>>
复合数据类型,英文词频统计
查看>>
“main cannot be resolved or is not a field”解决方案
查看>>
oc中使用switch实现图片浏览功能,补充其它的实现方式
查看>>
6、DRN-----深度强化学习在新闻推荐上的应用
查看>>
用父类指针指向子类对象
查看>>
Flexigrid默认是可以选择多行
查看>>