多对一映射 <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>
本文详细解析了Hibernate框架中多对一与一对一关联映射的配置方法,包括使用<many-to-one>和<one-to-one>标签进行关联的方式及应用场景,并通过具体的XML配置示例说明了不同映射的区别。

被折叠的 条评论
为什么被折叠?



