Hibernate关联关系>>>>一对多
例如部门与员工的关系,每个部门有多个员工,一个员工只属于某一个部门,具体配置文件如下:
<!-- employees属性,Set集合,表达的是本类与Employee的一对多
class属性:关联的实体类型
key子元素:对方表中的外键列(多方的那个表)
inverse属性:
默认为false,表示本方维护关联关系。
如果为true,表示本方不维护关联关系。
只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响。
cascade属性:
默认为none,代表不级联。
级联是指操作主对象时,对关联的对象也做相同的操作。
可设为:delete, save-update, all, none ...
lazy属性:懒加载,默认为true。
true:懒加载,在第一次使用时加载。
false:立即加载,在获取本对象时就加载这个集合的所有元素。
extra:增强的懒加载策略。
-->
<set name="employees" cascade="all" lazy="true">
<key column="departmentId"></key>
<one-to-many class="Employee"/>
</set>
<!-- department属性,表达的是本类与Department的多对一
class属性:关联的实体类型
column属性:外键列(引用关联对象的表的主键)
-->
<many-to-one name="department" class="Department" column="departmentId"></many-to-one>
>>>>多对多
例如老师与学生的关系,每个老师有多个��生,每个学生也有不止一个老师,具体配置如下:
<!-- teachers属性,Set集合。
表达的是本类与Teacher的多对多。
table属性:中间表(集合表)
key子元素:集合外键(引用当前表主键的那个外键)
-->
<set name="teachers" table="teacher_student" inverse="false">
<key column="studentId"></key>
<many-to-many class="Teacher" column="teacherId"></many-to-many>
</set>
<!-- students属性,Set集合。
表达的是本类与Student的多对多。
-->
<set name="students" table="teacher_student" inverse="true">
<key column="teacherId"></key>
<many-to-many class="Student" column="studentId"></many-to-many>
</set>
>>>>一对一(基于外键)
例如个人与其身份证的关系,每个人只有一个身份证,每个身份证也仅对应特定的某个人,具体配置文件如下:
<!-- person属性,Person类型。
表达的是本类与Person的一对一。
采用基于外键的一对一映射方式,本方有外键方。
-->
<many-to-one name="person" class="Person" column="personId" unique="true"></many-to-one>
<!-- idCard属性,IdCard类型。
表达的是本类与IdCard的一对一。
采用基于外键的一对一映射方式,本方无外键方。
property-ref属性:
写的是对方映射中外键列对应的属性名。
-->
<one-to-one name="idCard" class="IdCard" property-ref="person"/>
>>>>一对一(基于主键)
<id name="id">
<!-- 当使用基于主键的一对一映射时,
有外键方的主键生成策略一定要是foreign。
参数property:
生成主键值时所根据的对象。
-->
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<!-- person属性,Person类型。
表达的是本类与Person的一对一。
采用基于主键的一对一映射方式,本方有外键方。
-->
<one-to-one name="person" class="Person" constrained="true"></one-to-one>
<!-- idCard属性,IdCard类型。
表达的是本类与IdCard的一对一。
采用基于主键的一对一映射方式,本方无外键方。
-->
<one-to-one name="idCard" class="IdCard"></one-to-one>