跟单向关联仅有几处不同:
1从多的一方加入新的属性
package com.cnblogs.hibernate_first; public class Student { private int id; private String name; private Classes classes; public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2修改xml文件.Classes.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="com.cnblogs.hibernate_first"> <class name="Classes" table="t_classes"> <id name="id" column="t_id"> <generator class="native"></generator> </id> <property name="name" column="t_name" length="30"/> <!-- 将set student加入inverse 属性设为true ,则表示该字段放弃对多的一方的管理,表示从一的一方添加失效 --> <set name="students" inverse="true"> <key column="classesid"></key> <one-to-many class="com.cnblogs.hibernate_first.Student"/> </set> </class> </hibernate-mapping>
3,修改Student.hbm.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="com.cnblogs.hibernate_first"> <class name="Student" table="t_student"> <id name="id" column="t_id"> <generator class="native"></generator> </id> <property name="name" column="t_name" length="30"/> <many-to-one name="classes" column="classesid"></many-to-one> </class> </hibernate-mapping>
hibernate 一对多的关联映射(双向 Classes ——》Student)
采用一对多双向关联映射的目的主要是为了解决一对多单向关联的缺陷,而不是需求驱动
一对多双向关联的映射方式:
*在一的一端的集合上采用<key>标签,在多的一端加入一个外键
*在多的一端采用<many-to-on>标签
注意:<key>和<many-to-one>标签加入的字段保持一致,不然会出现数据混乱
inverse属性:
*inverse属性可以用在一对多和多对多双向关联上,默认是false,表示在本端可以维护关系,
如果inverse为true,则本端不能维护关系,会交给另外一端维护关系,本端失效。
所以一对多关联映射,我们通常在多的一端维护关系,让一的一端失效,所以设置inverse为true。
inverse和cascade
*inverse是控制方上的反转,只影响存储
*cascade是级联,是操作上的连锁反应