Posted on 2011-01-03 00:54
viery 閱讀(2050)
評(píng)論(2) 編輯 收藏 所屬分類:
Hibernate
1.many to one 多對(duì)一映射
此種模型最經(jīng)典的為user-->group,即站在user的角度上看,是由多個(gè)user對(duì)象屬于一個(gè)group對(duì)象。反過來的話,則是一個(gè)group對(duì)應(yīng)多個(gè)user,那是一對(duì)多關(guān)系。此種映射一旦建立,能在得到user對(duì)象的時(shí)候通過對(duì)象之間的關(guān)系得到group的屬性。
類:
User:
private int id;
private String name;
private Group group;
Group:
private int id;
private String name;
主要映射文件:
<class name="com.vle.domain.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="group" column="groupid"/>
</class>
得到屬性值:
User u=(User) session.load(User.class, 1);
System.out.print(u.getName()+"-->"+u.getGroup().getName());
2.one2one 主鍵關(guān)聯(lián) 單向映射
Person-->IdCard 一個(gè)人對(duì)應(yīng)一個(gè)身份證,"人"引用了"身份證"的主鍵作為外鍵,同時(shí)也作為"人"這張表的主鍵。
Person:
private int id;
private String name;
private IdCard idCard;
IdCard:
private int id;
private String cardNo;
主要映射文件:
<class name="com.vle.domain.Person" table="t_person">
<id name="id">
<!-- 通過foreign得到id生成策略,foreign會(huì)得到關(guān)聯(lián)對(duì)象的標(biāo)示 -->
<generator class="foreign">
<!-- property指的是建立關(guān)系的關(guān)聯(lián)對(duì)象,即Person中引用IdCard的idCard -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<!-- 使用one-to-one標(biāo)簽進(jìn)行描述,不會(huì)改變表結(jié)構(gòu),讓hibernate加載關(guān)聯(lián)對(duì)象,默認(rèn)關(guān)聯(lián)對(duì)象的主鍵作為此類的主鍵
使用 constrained生成外鍵約束
name:指加載對(duì)象時(shí),通過Person指定的主鍵(也就是idCard)把IdCard的關(guān)聯(lián)加上去
-->
<one-to-one name="idCard" constrained="true"/>
</class>
3.one2one 主鍵關(guān)聯(lián) 雙向映射
需要在IdCard對(duì)象中加入對(duì)Person的引用
IdCard:
private int id;
private String cardNo;
private Person person;
并且需要在IdCard.hbm.xml中加入對(duì)引用的描述:
<class name="com.vle.domain.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person"/>
</class>
4 one2one 唯一外鍵關(guān)聯(lián) 單向關(guān)聯(lián)
在person中持有idcard的引用:
private IdCard idCard;
Person映射文件:
<class name="com.vle.domain.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
一對(duì)一唯一外鍵關(guān)聯(lián)可以看做多對(duì)一的一種特例,只需要在many to one標(biāo)簽中將unique的屬性設(shè)置為true即可。
5 one2one 唯一外鍵關(guān)聯(lián) 雙向關(guān)聯(lián)
需要在IdCard中持有對(duì)Person的引用
private Person person;
IdCard映射文件:
<one-to-one name="person" property-ref="idCard"/>
將person用一對(duì)一標(biāo)簽描述,并且引用了外鍵idCard。