Hibernate 一对一映射(二)

来源:互联网 发布:建站100元 编辑:程序博客网 时间:2024/05/22 01:13

  上篇介绍了Hibernate一对一映射通过主键关联,这篇介绍一对一映射通过唯一外键关联,还是用Person和IdCard实例说明。


  唯一外键关联其实是多对一的的特例,采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性为一,就是这样来映射的。


单向:

Person端:

package com.bjpowernode.hibernate;public class Person {private int id;private String name;private 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;}}

Person.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.Person" table="t_person"><id name="id"><generator class="native"/></id><property name="name"/><many-to-one name="idCard" unique="true"/></class></hibernate-mapping>

IdCard端:

package com.bjpowernode.hibernate;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;}}
IdCard.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native"/></id><property name="cardNo"/></class></hibernate-mapping>

映射出的表结构如下:


双向:

Person端一样,看IdCard端:

package com.bjpowernode.hibernate;public class IdCard {private int id;private String cardNo;private Person person;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 Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}}
IdCard.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.IdCard" table="t_idCard"><id name="id"><generator class="native"/></id><property name="cardNo"/><one-to-one name="person" property-ref="idCard"/>      </class></hibernate-mapping>


  总结:用了两篇博客写了Hibernate一对一映射,一种实现策略是关联主键,另一种是唯一外键关联。这两种策略比较推荐使用第二种。关联主键不须在表中另外添加字段,通过主键相同来维护关系,采用的主键生成策略是“foreign”。局限在想要建立一对一映射的两张表必须主键一样。而相对于这个情况,第二种策略就好多了,它会另外添加一个字段,来维护这个关系。



0 0