一、多对一(many-to-one)
在映射文件中配置< many-to-one >标签,通过设置该标签的name属性与实体类中的对应属性连接(name属性值与实体属性名相同)。Hibernate利用反射技术根据对应的实体类中的属性的类型找到对应的表。
在employee映射中配置:
< many-to-one name=”dept” column=”dept_id”>
在 employee 实体中有属性 Department dept 对象中这样的引用对应到数据库中就是主外键的关联
实体Department有映射
上面的过程创建外键(dept的主键)
二、一对多(many-to-one)
实体类(dept)中的对象集合属性。Set<Employee> empl
在 dept 映射值配置
<set name=”empl”> //映射集合
<key column=”depart_id”/>
<one-to-many class=”Employee”/> //描述泛型
</set>
Employee 映射中的配置
< many-to-one name=”dept” column=”depart_id”>
三、一对一(one-to-one)
是分主从对象的。
基于主键 通过主键确定一一对应
在从对象IdCard中
<id name=”id”>
<generator class=”foreign”> // 由于从对象的主键是从主对象获得的所以保存从对象时不能不设置从对象对应的主对象
<param name=”property”>person</param>
</generator>
</id>
<one-to-one name=”person”>
在主对象 Person 中
<id name=”id”>
<generator class=”native”/>
</id>
<one-to-one name=”IdCard”>
基于外键 从对象通过外键,主对象通过从对象外键确定一一对应
在从对象中 id恢复
<many-to-one name=”person” column=”person_id” unique=”true” not-null”true”>
在主对象中
<one-to-one name=”idCard” property-ref=”person”>
四、多对多(many-to-many)
在学生实体映射中
<set name=”teacher” table=”teacher_student”>
<key column=”teacher_id”/>
<many-to-many class=”Student” column=”student_id”/>
</set>
在老师实体映射中
<set name=”student” table=”teacher_student”>
<key column=”student_id”/>
<many-to-many class=”Teacher” column=”teacher_id”/>
</set>
五、组件关联映射
就是复杂属性的映射,这个属性不值得使用上面的映射。
<component name=”name”>
<property name=”firstName” column=”first_name”/>
<property name=”laseName” column=”last_name”/>
</component>
六、级联和关系维护
谁维护关系谁就是持久状态的,联系在一起的实体发生的任何变化都会引发关系维护端的update。关系维护端是执行set的那端。
Cascade和inverse:Cascade用来说明当对主对象进行某种操作时是否对其关联的从对象也做类似操作,常用的cascade有:none,all,save-update,delete,lock,refresh,evict,replicate,persist,merge,delete-orphan.
一般对many-to-one,many-to-many不设置级联,在one-to-one,和one-to-many中设置级联
Inverse表示是否放弃维护关联关系,用在集合中,不能在有序的集合中使用。
在多对多关系中只能由一端维护关系,因为涉及到中间表。