之前我们介绍了hibernate中怎样配置一对多的关系,现在我们在来进一步讨论下多对多关系的配置,以及最后对hibernate中关系配置
的相关常用参数进行一个小结。
依然拿租房子的例子来说,如果多个人对应多个房间,那么这里就要用配置多对多的关系
与一对多不同的是实现需要引入一张链接表 在该表中有pid和rid两个复合主键
在多对多关系中同样有单项和双向的关系。
就单向关系中
在Room类中有一个 Set Person person属性
在对应的.hbm文件中<set name="person" table="连接表" lazy="true" casecade="all">
<key column="rid"></key>
<many-to-many class="Person类" column="pid">
</set>
如果多对多是双向关系,那么只需要从person一方可以了解到所对应的room就可以了。
Room类和其对应的.hbm文件不用修改,只需在person类中添加一个Set Room room属性
在对应的.hbm文件中配置
<set name="room" table="连接表" lazy="true" casecade="all">
<key column="pid"></key>
<many-to-many class="Room类" column="pid">
的相关常用参数进行一个小结。
依然拿租房子的例子来说,如果多个人对应多个房间,那么这里就要用配置多对多的关系
与一对多不同的是实现需要引入一张链接表 在该表中有pid和rid两个复合主键
在多对多关系中同样有单项和双向的关系。
就单向关系中
在Room类中有一个 Set Person person属性
在对应的.hbm文件中<set name="person" table="连接表" lazy="true" casecade="all">
<key column="rid"></key>
<many-to-many class="Person类" column="pid">
</set>
如果多对多是双向关系,那么只需要从person一方可以了解到所对应的room就可以了。
Room类和其对应的.hbm文件不用修改,只需在person类中添加一个Set Room room属性
在对应的.hbm文件中配置
<set name="room" table="连接表" lazy="true" casecade="all">
<key column="pid"></key>
<many-to-many class="Room类" column="pid">
</set>
<many-to-one>属性含义
name ="一方对应映射类中属性名"
column="一方对应映射表中的字段名"
casecade="all|none|save-update|delete" 级联程度(all在所有情况下都执行级联,none在所有情况下都不执行,save-update在保持和更新的时候执行,delete在删除的时候执行级联。
outer-join = "true|false|auto" 外连接
update="true|false"
insert="true|false"
property-ref="关联类的属性名" 指定关联类的属性
access="field|property|className" 默认property 用来访问属性的策略
在单向多对一关系中,多方对象引用一方对象,即多发是主控方。