Hibernate中的几种经典对象模型和关系模型的映射

转自:http://www.blogjava.net/javavle/archive/2011/01/03/342111.html

1.many to one 多对一映射

此种模型最经典的为user-->group,即站在user的角度上看,是由多个user对象属于一个group对象。反过来的话,则是一个group对应多个user,那是一对多关系。此种映射一旦建立,能在得到user对象的时候通过对象之间的关系得到group的属性。

类:

User:

privateintid;

privateStringname;

privateGroupgroup;

Group:

privateintid;

privateStringname;

主要映射文件:

<classname="com.vle.domain.User"table="t_user">

<idname="id">

<generatorclass="native"/>

</id>

<propertyname="name"/>

<many-to-onename="group"column="groupid"/>

</class>

得到属性值:

Useru=(User)session.load(User.class,1);

System.out.print(u.getName()+"-->"+u.getGroup().getName());

2.one2one主键关联单向映射

Person-->IdCard一个人对应一个身份证,"人"引用了"身份证"的主键作为外键,同时也作为"人"这张表的主键。

Person:

privateintid;

privateStringname;

privateIdCardidCard;

IdCard:

privateintid;

privateStringcardNo;

主要映射文件:

<classname="com.vle.domain.Person"table="t_person">

<idname="id">

<!--通过foreign得到id生成策略,foreign会得到关联对象的标示-->

<generatorclass="foreign">

<!--property指的是建立关系的关联对象,即Person中引用IdCard的idCard-->

<paramname="property">idCard</param>

</generator>

</id>

<propertyname="name"/>

<!--使用one-to-one标签进行描述,不会改变表结构,让hibernate加载关联对象,默认关联对象的主键作为此类的主键

使用constrained生成外键约束

name:指加载对象时,通过Person指定的主键(也就是idCard)把IdCard的关联加上去

-->

<one-to-onename="idCard"constrained="true"/>

</class>

3.one2one主键关联双向映射

需要在IdCard对象中加入对Person的引用

IdCard:

privateintid;

privateStringcardNo;

privatePersonperson;

并且需要在IdCard.hbm.xml中加入对引用的描述:

<classname="com.vle.domain.IdCard"table="t_idcard">

<idname="id">

<generatorclass="native"/>

</id>

<propertyname="cardNo"/>

<one-to-onename="person"/>

</class>

4one2one唯一外键关联单向关联

在person中持有idcard的引用:

privateIdCardidCard;

Person映射文件:

<classname="com.vle.domain.Person"table="t_person">

<idname="id">

<generatorclass="native"/>

</id>

<propertyname="name"/>

<many-to-onename="idCard"unique="true"/>

</class>

一对一唯一外键关联可以看做多对一的一种特例,只需要在manytoone标签中将unique的属性设置为true即可。

5one2one唯一外键关联双向关联

需要在IdCard中持有对Person的引用

privatePersonperson;

IdCard映射文件:

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

将person用一对一标签描述,并且引用了外键idCard。

相关推荐