Hibernate的Cascade——级联操作

 

在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当

前实体时,针对当前实体的操作会影响到相应配置的关联实体。比如针对当前实体进行保存操作时,会同时保存

与其关联的实体,当然这种额外操作的产生取决于你是否在当前实体的配置文件中对关联实体的元素配置了

Cascade属性。

 

而需要进行级联的操作可能涉及到增加,修改,删除等相应的数据库操作,具体Cascade的取值则

分为多种,如all,表示针对所有操作都会进行级联,如save-update,表示针对插入和修改会进行级联操作。对

于Cascade的取值问题需要根本具体需求而定,这里没有一个统一的标准应该取怎样的值符合你的需要。从现实

需求分析来决定应该如何取值。

 

all ::                       所有情况下均进行关联操作。
none:                    所有情况下均不进行关联操作。这是默认值。
save-update:       在执行save/update/saveOrUpdate时进行关联操作。
delete:                  在执行delete时进行关联操作。

all的意思是save-update + delete

all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点

举个例子说一下all-delete-orphan:
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items. 举个例子,现items中存两个

Item, item1,item2,如果定义关系为all-delete-orphan当items中删除掉一个item(比如用remove()方法删除

item1),那么被删除的Item类实例将变成孤儿节点,当执行category.update(),或session.flush()时hibernate同

步缓存和数据库,会把数据库中item1对应的记录删掉。

 

参考博客:

http://dreamzhong.iteye.com/blog/1273157

http://apps.hi.baidu.com/share/detail/5946383

时间: 2025-01-03 07:48:36

Hibernate的Cascade——级联操作的相关文章

在Hibernate中正确实现关联关系中的级联操作(cascading)

关系数据库系统本身就比较复杂,加上Hibernate的O/R映射层,复杂度加重了,很容易出现问题,本人将最近遇到的问题和解决方法做一个总结,整理在下面的一系列文章中 正确理解Hibernate的聚合类型(collection)的使用 在Hibernate中正确实现关联关系中的级联操作(cascading) 在Hibernate框架中编写持久对象类实现外键关联的几点注意事项 本文是第二篇,讲解在one-to-many(一对多)和many-to-one(多对一)关联关系中的cascade特性的声明方

LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作

从(1)我们看到,当生成entity class定义时,entity class或xml mapping文件中都已经完整的包含了entity和关系数据库的映射信息了,LINQ2SQL会根据这些信息来把CRUD操作转化为SQL提交给数据库,并且把数据库的返回DataTable封装成我们想要的对象. 所谓简单对象,就是数据表定义中没有Foreign-key的entity class,在操作这类对象时不会涉及级联的操作. 简单对象的CRUD操作,可参考MSDN:http://msdn.microsof

LINQ TO SQL级联操作

LINQ TO SQL 是.NET Framework 3.5 版的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构.在LINQ to SQL 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型.当应用程序运行时,LINQ to SQL 会将对象模型中的语言集成查询转换为SQL,然后将它们发送到数据库进行执行.摘自<MSDN>. 在关系数据库中,两个表之间的关联关系有三种情况:一对一关系,一对多关系,多对多关系.本系列对上述各种关系演示Linq To SQL如何实现

select级联操作new Option问题

问题描述 select级联操作new Option问题 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&

spinner-Spinner级联操作时实现继承的抽象方法

问题描述 Spinner级联操作时实现继承的抽象方法 Spinner sp=(Spinner)findViewById(R.id.spinner1); sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { String pro

关于hibernate多表级联查询的问题

问题描述 关于hibernate多表级联查询的问题 有一个问题,有4个表和对应的类A,B,C,D,A和B分别与C级联,C和D级联,但是A需要获取D中信息,但是B不需要,怎么在B里设置不查询D?怎么注解? 解决方案 多表级联Hibernate级联关系问题

下拉菜单的级联操作(ajax)_AJAX相关

在开发中常常会遇到菜单的级联操作,比如:国家.城市.乡镇的选择等.当选中某个国家的时候,后面的菜单会把该国家内的城市罗列出来,当选中城市的时候,后面的菜单会把对应的乡镇列出来.  解决这种菜单的级联操作的办法,我理解的有两种: ①使用js来实现,把页面所用到的级联数据放到js内,当页面加载完成后,通过js显示到对应的select内,这种方法的解决办法有很多种,最为直观的一种是放到多维数组中,每个人的思维不一样,这里就不详细解说. ②使用ajax异步动态加载,然后显示到对应的select内,这种方

jQuery级联操作绑定事件实例_jquery

级联操作绑定事件是jQuery非常具有实用价值的一个技巧,本文即以实例形式实现这一功能.分享给大家供大家参考之用.具体方法如下: 本文所述实例主要实现jQuery操作一个列表,根据类别选出学校,点击学校出现院系,点击院系出现专业,然后链接至专业申请页面. 具体功能代码如下: $("li.university").click(function(){ var id = $(this).attr("rel"); $.get("data.aspx?type=u&a

下拉菜单的级联操作(ajax)

在开发中常常会遇到菜单的级联操作,比如:国家.城市.乡镇的选择等.当选中某个国家的时候,后面的菜单会把该国家内的城市罗列出来,当选中城市的时候,后面的菜单会把对应的乡镇列出来. 解决这种菜单的级联操作的办法,我理解的有两种: ①使用js来实现,把页面所用到的级联数据放到js内,当页面加载完成后,通过js显示到对应的select内,这种方法的解决办法有很多种,最为直观的一种是放到多维数组中,每个人的思维不一样,这里就不详细解说. ②使用ajax异步动态加载,然后显示到对应的select内,这种方法