*两个对象之间是一对一的关系,如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>
原文链接:http://blog.csdn.net/fengxuezhiye/article/details/7374584
【编辑推荐】