多对一映射 <many-to-one>
//User.hbm.xml
<hibernate-mapping>
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="group" column="groupid"/>
<!--
<many-to-one name="group" column="groupid" cascade="all"/>
如果改成 <many-to-one name="group" column="groupid" unique="true"/>则变成一对一唯一外键关联,因为它限制了"多"一端只能为一
-->
</class>
</hibernate-mapping>
//Group.hbm.xml
<hibernate-mapping>
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
一对一主键映射(双向,主键又做处键,默认根据主键加载)
<hibernate-mapping>
<class name="Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person"/> Person-->IdCard单向关联时,不用这句
</class>
</hibernate-mapping>
一对一外键关联映射(双向) 其中,单向是<many-to-one>的一种特例
Person端是<many-to-one>,而IdCard端是<one-to-one>
一对一唯一外键关联双向,需要在另一端(idcard),添加<one-to-one>标签,指示hibernate如何加载
其关联对象,默认根据主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,
所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:
<one-to-one name="person" property-ref="idCard"/>
<hibernate-mapping>
<class name="Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<one-to-one name="person" property-ref="idCard"/>
</class>
</hibernate-mapping>