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