Hibernate.hbm.xml映射关系(一对一、一对多、多对多)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/umbrella_419/article/details/77519881

Hibernate映射:

一:one-to-one(一对一),例如人和身份证的关系

1、建立两张表,Person、Card(pid对应cid)

(1)数据库:Person(pid,pname)为主表,(cid,cnum)Card为从表;

(2)实体类:主表中有从表的属性,从表中有主表的属性

(3)关系:先要有Person表才能有Card,如果Person表删了Card也会自动销毁;如果Card表删了,Person表还在。

(4)根据实体类和关系建立hbm.xml文件

Person.hbm.xml:

<one-to-one name="从表的对象名" class="从表类权限定名" cascade="all-delete-orphan"></one-to-one>

Card.hbm.xml:

主键的生成策略:foreign

<generator class="foreign">

<param name="property">从表中定义主表的对象名</param>

</generator>

<one-to-one name="从表中定义主表的对象名" class="主表类权限定名">

二:one-to-many(一对多),例如省和市之间关系

1、建立两张表 Province、City(pid对应pid)

(1)数据库:Province(pid,pname)为主表,(cid,cname,pid)Card也为主表,pid为外键;

(2)实体类:(一端)Province实体类定义多端集合,需要实例化HashSet,一对多的关系;(多端)City实体定义一端对象,多对一的关系;

(3)映射文件:

Province.hbm.xml:

<set name="一端中定义多端的集合名" table="多端表名" cascade="save-update">

     <key column="多端表中外键名"></key>

     <one-to-many class="多端类权限定名">

</set>

City.hbm.xml:

<many-to-one name="多端类中定义一端的属性名" class="一端类权限定名" column="多端表中外键名(一端ID)">

</many-to-one>

三:many-to-many(多对多),例如人和角色之间的关系

1、建立三张表Person、Roles、p_s(关系表)

(1)数据库:Person(pid,pname)pid主键、Roles(rid,rname)rid主键、p_r(pid,rid)不设主外键

(2)实体类:(多端Roles)Person实体类定义多端集合,需要实例化HashSet、(多端Person)Roles实体类定义多端集合,需要实例化HashSet

(3)映射文件:
Person.htm.xml:

<set name="(Roles)多端的集合名" table="关系表名(p_r)"  cascade="save-update">

     <key column="pid">    </key>

             <many-to-many class="多端类权限定名" column="rid">

            </many-to-many>

</set>

Roles.htm.xml:

<set name="(Person)多端的集合名" table="关系表名(p_r)" >

     <key column="rid">   </key>

             <many-to-many class="多端类权限定名" column="pid">

            </many-to-many>

</set>




     







展开阅读全文

没有更多推荐了,返回首页