Hibernate—annotation 学习笔记 第36页 共109页
第16课 关系映射(重点)
注意:这里的关系是指:对象之间的关系,并不是指数据库的关系,-----红色重要 存在以下关系: 1、 一对一
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
一、 一对一 关联映射 ? ?
两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) 有两种策略可以实现一对一的关联映射 ? ?
主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联。
唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系。 对象模型
单向(主键、外键) 双向(主键、外键) 单向 双向 单向 双向 单向 双向 List Set Map 单表 多表
一张主表、多张子表 @Embeddable @Embedded
2、 一对多
3、 多对一
4、 多对多
5、 集合映射
6、 继承关系(不重要)
7、 组件映射
Persionidint
/** 人-实体类 */ public class Person { private int id; private String name; public int getId() {return id; } IdCardidintcardNovarchar(18)
public void setId(int id) { this.id = id;} Hibernate—annotation 学习笔记 第37页 共109页
}
/**身份证-实体类*/ public class IdCard { } (一) 唯一外键关联-单向(unilateralism) 1、 说明:
人—-> 身份证号(Person?IdCard),从IdCard看不到Person对象 2、 对象模型
需要在Person类中持有IdCard的一个引用idCard,则IdCard中没有Person的引用
private int id; private String cardNo; public int getId() {return id;} public void setId(int id) {this.id = id;} public String getCardNo() { return cardNo;} public void setCardNo(String cardNo) {this.cardNo = cardNo;} public String getName() {return name;} public void setName(String name) {this.name = name;}
3、 关系模型
关系模型目的:是实体类映射到关系模型(数据库中),是要求persion中添加一个外键指向idcard
4、 实体类:
注:IdCard是被引用对象,没有变化。 } /** 人-实体类 */ public class Person { private int id; private String name; private IdCard idCard;//引用IdCard对象 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 IdCard getIdCard() { return idCard;} public void setIdCard(IdCard idCard) {this.idCard = idCard;} Hibernate—annotation 学习笔记 第38页 共109页
5、 xml映射
IdCard实体类的映射文件:
因为IdCard是被引用的,所以没有什么特殊的映射
在映射时需要添加一个外键的映射,就是指定IdCard的引用的映射。这样映射到数据库时,就会自动添加一个字段并作用