您的位置:首页 > 其它

012一对一 唯一外键关联映射_双向(one-to-one)

2014-11-06 10:27 441 查看
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号)

² 有两种策略可以实现一对一的关联映射

主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联。

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

实例场景:人<—-> 身份证号(Person<->IdCard)双向:互相持有对方的引用

对象模型(唯一外键关联映射-双向):



IdCard实体类:

public class IdCard {

private int id;

private String cardNo;

private Person 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;

}

}


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;

}

}


Person实体类映射文件:

<hibernate-mapping>

<class name="com.wjt276.hibernate.Person" table="t_person">

<id name="id" column="id">

<generator class="native"/>

</id>

<property name="name"/>

<!-- <many-to-one>:在多的一端(当前Person一端),加入一个外键(当前为idCard)指向一的一端(当前IdCard),但多对一 关联映射字段是可以重复的,所以需要加入一个唯一条件unique="true",这样就可以此字段唯一了。-->

<many-to-one name="idCard" unique="true"/>

</class>

</hibernate-mapping>


IdCard实体类映射文件:

<hibernate-mapping>

<class name="com.wjt276.hibernate.IdCard" table="t_idcard">

<id name="id" column="id">

<generator class="native"/>

</id>

<property name="cardNo"/>

<!--

<one-to-one>标签:告诉hibernate如何加载其关联对象

property-ref属性:是根据哪个字段进行比较加载数据

-->

<one-to-one name="person" property-ref="idCard"></one-to-one>

</class>

</hibernate-mapping>


总结:

一对一 唯一外键 关联映射 双向 需要在另一端(当前IdCard),添加<one-to-one>标签,指示hibernate如何加载其关联对象(或引用对象),默认根据主键加载(加载person),外键关联映射中,因为两个实体采用的是person的外键来维护的关系,所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:

<!--

<one-to-one>标签:告诉hibernate如何加载其关联对象

property-ref属性:是根据哪个字段进行比较加载数据

-->

<one-to-one name="person" property-ref="idCard"></one-to-one>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: