1.Hibernate中关联关系可以分为:
单向关系:只能一张表指向另一张表。
双向关系:表与表之间可以互相指向。
2.根据关联的表的不同可以分为:
1对1关系
1对多关系
多对多关系
例如:1个客户可以对应多个订单,是1对多的关系。
(1)1对多关联:
单向多对1:使用<many-to-one/>映射,在数据库中就会添加外键列。
在多端.hbm.xml文件中使用如下代码:
单向1对多:使用<many-to-one/>映射,在数据库中就会添加外键列<many-to-one name="多端实体类对应属性名" column="外键列名" class="关联类名(对应的外键类名)"/>
在1端.hbm.xml文件中使用如下代码:
双向1对多:在1端使用<set>,在多端使用<many-to-one/>,实际开发时一般使用此关联<set name="1端对应属性名"> <key column = "外键列名"/> <one-to-many name="关联类名"/> </set>
(2)1对1关联:4种类型(主表:有外键的表;外键表:外键对应的表)
基于外键单向关联:特殊的单向多对1关系,多端也是1
在主表对应实体类.hbm.xml文件中使用如下代码:
<many-to-one name="属性名" column="外键列名" class="关联表名" unique="true" cascade="all"/>
unique="true":表示1对1,默认为false表示多对1。
cascade="all":表示对当前实体对象进行操作时同时对关联对象操作。
基于外键双向关联:
外键可以放在任意一边,在放外键的一端使用<many-to-one/>,将属性unique的属性值谁知为true,在外键对应的另一端设置<one-to-one/>
基于主键单向关联:在主表对应实体类.hbm.xml映射文件中定义主键生成策略:
<!-- foreign:表示以关联的实体生成主键 --> <generator class="foreign"> <param name="property">当前类中关联属性名</param> </generator>
并在主表 对应实体类.hbm.xml文件中设置<one-to-one/>关联:
<one-to-one name="属性名" class="关联类名(外键类名)" constrained="true"/>
constrained="true":表示当前实体映射的数据表的主键同时作为外键关联指定实体类映射的数据表。
基于主键双向关联:
两端都使用<one-to-one/>,其中一端的主键生成策略必须由关联实体生成:
<generator class="foreign"> <param name="property">当前类中关联属性名</ param> </ generator>