Hibernate一对一 主键关联映射(one-to-one)

来源:互联网 发布:苹果电脑安装办公软件 编辑:程序博客网 时间:2024/04/29 05:13
*两个对象之间是一对一的关系,如Person-IdCard(人-身份证号)
*有两种策略可以实现一对一的关联映射
  》主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应关系;数据库不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联

  》唯一外键关联:外键关联本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联映射

1.主键关联映射(单向)


实例场景:人-->身份证号(Person-->IdCard),从IdCard看不到Person对象

对象模型:

IdCard实体类:

public class IdCard {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;}}
Person实体类:

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;}}
IdCard实体映射文件:

<hibernate-mapping><class name="com.cn.hibernate.IdCard" table="t_idcard"><id name="id" column="id"><generator class="native"/></id><property name="cardNo"/></class></hibernate-mapping>

Person实体映射文件:

<hibernate-mapping><class name="com.cn.hibernate.Person" table="t_person"><id name="id" column="id"><!--因为主键不是自己生成的,而是作为一个外键(来源于其它值),所以使用foreign生成策略foreign:使用另外一个相关联的对象的标识符,通常和<one-to-one>联合起来使用。再使用元素<param>的属性值指定相关联对象(这里Person相关联的对象为idCard,则标识符为idCard的id)为了能够在加载person数据同时加载IdCard数据,所以需要使用一个标签<one-to-one>来设置这个功能。 --><generator class="foreign"><!-- 元素<param>属性name的值是固定为property --><param name="property">idCard</param></generator></id><property name="name"/><!-- <one-to-one>标签表示如何加载它的引用对象(这里引用对象就指idCard这里的name值是idCard),同时也说是一对一的关系。默认方式是根据主键加载(把person中的主键取出再到IdCard中来取相关IdCard数据。) 我们也说过此主键也作为一个外键引用 了IdCard,所以需要加一个数据库限制(外键约束)constrained="true" --><one-to-one name="idCard" constrained="true"/></class></hibernate-mapping>







原创粉丝点击