hibernate中的cascade和inverse

  在hibernate中表间的关系维护是最重要的,而这又与cascade和inverse是分不开的。

  表结构:学生和课程是多对多的关系,通过第三张表来映射来者间的关系。

  类结构:

  下面来保存一些数据:

@Test
	public void save() {
		Session session = factory.openSession();
		session.getTransaction().begin();

		Course course = new Course();
		course.setCname("数学");
		Course course1 = new Course();
		course1.setCname("语文");

		Student stu =  new Student();
		stu.setSname("张三");
		Student stu1 =  new Student();
		stu1.setSname("李四");
		//在代码中是course维护两者间的关系,因此需要将对应的映射文件中的inverse设为false,如果设置为true,则会导致第三张表为空
		course.getStu().add(stu);
		course.getStu().add(stu1);
//因为是course建立关系,所以在代码中是保存course,但是将对应的映射文件中的cascade设置为all,因此在保存course的同时也会保存student,如果不做此设置则会报错,因为学生类不会保存//如果是course建立关系,而代码中保存student是不会保存course的,因为级联是两者建立关系才会起作用
		session.save(course);
		session.save(course1);

		session.getTransaction().commit();
		session.close();
	}

  对应的映射文件如下:

  <set name="stu" table="course_stu" cascade="all" inverse="true">
        	<key>
        		<column name="cid"></column>
        	</key>
        	<many-to-many class="Student" column="sid"></many-to-many>
        </set>

  【一对多中是多的一方维护关系,多对多中在页面现实的一方维护关系】

时间: 2024-08-02 02:51:32

hibernate中的cascade和inverse的相关文章

hibernate中关系操作(inverse)和级联操作(cascade)详解

以用户.角色.用户文件为例讲解inverse(关系操作)和(cascade)操作 inverse 取值 true(不维护关系)或false(维护关系  默认为false) 该属性主要操作的是外键 cascade 取值null(默认值).save-update .all .delete 用户.角色是多对多的关系 用户的映射文件表示: <hibernate-mapping> <class name="com.xing.elec.domain.ElecUser" table

具体解释Hibernate中cascade与inverse

学习hibernate的时候对级联关系的概念老是分不清楚,尤其是cascade.inverse傻傻分不清.以下通过样例来简单说明. 准备工作: 首先创建数据库,新建两张表: 教室表classes (字段此处省) 学生表student(字段此处省) 教室与学生是一对多的关系. 然后新建项目,加入hibernate对两张表的支持. 1.cascade cascade表示级联操作.即两个实体间存在级联关系(一个类是还有一个类中的属性)时,当保存.更新或删除一个实体时,是否对关联的实体做出相应操作(数据

详解Hibernate中cascade与inverse

学习hibernate的时候对级联关系的概念老是分不清楚,尤其是cascade.inverse傻傻分不清.下面通过例子来简单说明. 准备工作: 首先创建数据库,新建两张表: 教室表classes (字段此处省) 学生表student(字段此处省) 教室与学生是一对多的关系. 然后新建项目,添加hibernate对两张表的支持. 1.cascade cascade表示级联操作,即两个实体间存在级联关系(一个类是另一个类中的属性)时,当保存.更新或删除一个实体时,是否对关联的实体做出相应操作(数据库

Hibernate中cascade和inverse的作用

Inverse和cascade是Hibernate映射中最难掌握的两个属性.两者都在对象的关联操作中发挥作用.1.明确inverse和cascade的作用inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因 为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用).cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关

Hibernate中inverse属性与cascade属性

Hibernate集合映射中,经常会使用到"inverse"和"cascade"这两个属性.对于我这样,Hibernate接触不深和语文水平够烂的种种因素,发现这两个属性实在是难以理解,无奈只好将这个两个属性解释工作交给了Google和Baidu,查看了许多牛人的解释,加上自己在Eclipse上的调试,对"inverse"和"cascade"这两个属性有了一定的见解. "inverse"属性探究 "

Hibernate中的inverse属性

Inverse属性 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库.按照原来的映射文件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对

Hibernate中cascade作用

Hibernate中cascade作用 只有“关系标记”才有cascade属性: 一个操作因级联cascade可能触发多个关联操作.前一个操作叫“主控操作”,后一个操作叫“关联操作”. cascade属性的可能值有    all: 所有情况下均进行关联操作,即save-update和delete.    none: 所有情况下均不进行关联操作.这是默认值. save-update: 在执行save/update/saveOrUpdate时进行关联操作.     delete: 在执行delete

Hibernate级联操作解密(inverse和cascade)

总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/update/saveOrUpdate时进行关联操作.  delete:在执行delete时进行关联操作. Inverse:在一对多模型中,只能在一的一方设置,inverse的作用就是在级联发生后,会再次更新子表数据的外键为主表的主键.确保子表外键不会为空. 下面演示一个班级学生的例子(一对多): 班

Hibernate 配置文件 细节 cascade inverse

今天写东西,在配置关系时 ,随后就将cascade 配置, 而且配的值是false . 尼玛 ,结果很悲催,已启动就报错 ,弄得我云里雾里的,后来仔细检查发现原来是cascade在做该.现总结一下.顺便复习一下inverse . 1.cascade 层叠,有了它我们在操作删除和更新的时候会更加方便.只要在cascade的源头插入或者删除,所有cascade 的关系就会被动的插入或者删除.cascade 有一个值很重要,saveOrUpdate ,Hibernate根据这个属性值来判断一个对象时插