- 浏览: 269357 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
*
Hibernate传播性持久化攻略
* http://developer.51cto.com 2009-09-24 16:39 佚名 javanb 我要评论(1)
Hibernate默认不实现所谓的可到达即Hibernate传播性持久化(persistence by reachability)的策略。每个Hibernate session的基本操作都有对应的级联风格(cascade style)。
本文向大家介绍Hibernate传播性持久化(transitive persistence),可能好多人还不了解Hibernate传播性持久化(transitive persistence),没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
对每一个对象都要执行保存,删除或重关联操作让人感觉有点麻烦,尤其是在处理许多彼此关联的对象的时候。 一个常见的例子是父子关系。考虑下面的例子:
如果一个父子关系中的子对象是值类型(value typed)(例如,地址或字符串的集合)的,他们的生命周期会依赖于父对象,可以享受方便的级联操作(Cascading),不需要额外的动作。
父对象被保存时,这些值类型(value typed)子对象也将被保存;父对象被删除时,子对象也将被删除。 这对将一个子对象从集合中移除是同样有效:Hibernate会检测到,并且因为值类型(value typed)的对象不可能被其他对象引用,所以Hibernate会在数据库中删除这个子对象。
现在考虑同样的场景,不过父子对象都是实体(entities)类型,而非值类型(value typed)(例如,类别与个体,或母猫和小猫)。 实体有自己的生命期,允许共享对其的引用(因此从集合中移除一个实体,不意味着它可以被删除), 并且实体到其他关联实体之间默认没有级联操作的设置。Hibernate默认不实现所谓的可到达即Hibernate传播性持久化(persistence by reachability)的策略。
每个Hibernate session的基本操作 - 包括 persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate() - 都有对应的级联风格(cascade style)。 这些级联风格(cascade style)风格分别命名为 create, merge, save-update, delete, lock, refresh, evict, replicate。 如果你希望一个操作被顺着关联关系级联传播,你必须在映射文件中指出这一点。例如:
1. <one-to-one name="person" cascade="persist"/>
级联风格(cascade style)是可组合的:
1. <one-to-one name="person" cascade="persist,delete,lock"/>
你可以使用cascade="all"来指定全部操作都顺着关联关系级联(cascaded)。 默认值是cascade="none",即任何操作都不会被级联(cascaded)。
注意有一个特殊的级联风格(cascade style) delete-orphan,只应用于one-to-many关联,表明delete()操作 应该被应用于所有从关联中删除的对象。
建议:
通常在或关系中应用级联(cascade)没什么意义。 级联(cascade)通常在 和关系中比较有用。
如果子对象的寿命限定在父亲对象的寿命之内,可通过指定cascade="all,delete-orphan"将其变为自动生命周期管理的对象(lifecycle object)。
其他情况,你可根本不需要级联(cascade)。但是如果你认为你会经常在某个事务中同时用到父对象与子对象,并且你希望少打点儿字,可以考虑使用cascade="persist,merge,save-update"。
可以使用cascade="all"将一个关联关系(无论是对值对象的关联,或者对一个集合的关联)标记为父/子关系的关联。 这样对父对象进行save/update/delete操作就会导致子对象也进行save/update/delete操作。
此外,一个持久的父对象对子对象的浅引用(mere reference)会导致子对象被同步save/update。 不过,这个隐喻(metaphor)的说法并不完整。除非关联是关联并且被标记为cascade="delete-orphan", 否则父对象失去对某个子对象的引用不会导致该子对象被自动删除。 父子关系的级联(cascading)操作准确语义如下:
如果父对象被persist(),那么所有子对象也会被persist()
如果父对象被merge(),那么所有子对象也会被merge()
如果父对象被save(),update()或 saveOrUpdate(),那么所有子对象则会被saveOrUpdate()
如果某个持久的父对象引用了瞬时(transient)或者脱管(detached)的子对象,那么子对象将会被saveOrUpdate()
如果父对象被删除,那么所有子对象也会被delete()
除非被标记为cascade="delete-orphan"(删除“孤儿”模式,此时不被任何一个父对象引用的子对象会被删除), 否则子对象失掉父对象对其的引用时,什么事也不会发生。 如果有特殊需要,应用程序可通过显式调用delete()删除子对象。
最后,注意操作的级联可能是在调用期(call time)或者写入期(flush time)作用到对象图上的。所有的操作,如果允许,都在操作被执行的时候级联到可触及的关联实体上。然而,save-upate和delete- orphan是在Session flush的时候才作用到所有可触及的被关联对象上的。
本文只是大概的说明了Hibernate传播性持久化的应用,可能还有不足的地方,读者可以查更多的书去了解。
Hibernate传播性持久化攻略
* http://developer.51cto.com 2009-09-24 16:39 佚名 javanb 我要评论(1)
Hibernate默认不实现所谓的可到达即Hibernate传播性持久化(persistence by reachability)的策略。每个Hibernate session的基本操作都有对应的级联风格(cascade style)。
本文向大家介绍Hibernate传播性持久化(transitive persistence),可能好多人还不了解Hibernate传播性持久化(transitive persistence),没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
对每一个对象都要执行保存,删除或重关联操作让人感觉有点麻烦,尤其是在处理许多彼此关联的对象的时候。 一个常见的例子是父子关系。考虑下面的例子:
如果一个父子关系中的子对象是值类型(value typed)(例如,地址或字符串的集合)的,他们的生命周期会依赖于父对象,可以享受方便的级联操作(Cascading),不需要额外的动作。
父对象被保存时,这些值类型(value typed)子对象也将被保存;父对象被删除时,子对象也将被删除。 这对将一个子对象从集合中移除是同样有效:Hibernate会检测到,并且因为值类型(value typed)的对象不可能被其他对象引用,所以Hibernate会在数据库中删除这个子对象。
现在考虑同样的场景,不过父子对象都是实体(entities)类型,而非值类型(value typed)(例如,类别与个体,或母猫和小猫)。 实体有自己的生命期,允许共享对其的引用(因此从集合中移除一个实体,不意味着它可以被删除), 并且实体到其他关联实体之间默认没有级联操作的设置。Hibernate默认不实现所谓的可到达即Hibernate传播性持久化(persistence by reachability)的策略。
每个Hibernate session的基本操作 - 包括 persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate() - 都有对应的级联风格(cascade style)。 这些级联风格(cascade style)风格分别命名为 create, merge, save-update, delete, lock, refresh, evict, replicate。 如果你希望一个操作被顺着关联关系级联传播,你必须在映射文件中指出这一点。例如:
1. <one-to-one name="person" cascade="persist"/>
级联风格(cascade style)是可组合的:
1. <one-to-one name="person" cascade="persist,delete,lock"/>
你可以使用cascade="all"来指定全部操作都顺着关联关系级联(cascaded)。 默认值是cascade="none",即任何操作都不会被级联(cascaded)。
注意有一个特殊的级联风格(cascade style) delete-orphan,只应用于one-to-many关联,表明delete()操作 应该被应用于所有从关联中删除的对象。
建议:
通常在或关系中应用级联(cascade)没什么意义。 级联(cascade)通常在 和关系中比较有用。
如果子对象的寿命限定在父亲对象的寿命之内,可通过指定cascade="all,delete-orphan"将其变为自动生命周期管理的对象(lifecycle object)。
其他情况,你可根本不需要级联(cascade)。但是如果你认为你会经常在某个事务中同时用到父对象与子对象,并且你希望少打点儿字,可以考虑使用cascade="persist,merge,save-update"。
可以使用cascade="all"将一个关联关系(无论是对值对象的关联,或者对一个集合的关联)标记为父/子关系的关联。 这样对父对象进行save/update/delete操作就会导致子对象也进行save/update/delete操作。
此外,一个持久的父对象对子对象的浅引用(mere reference)会导致子对象被同步save/update。 不过,这个隐喻(metaphor)的说法并不完整。除非关联是关联并且被标记为cascade="delete-orphan", 否则父对象失去对某个子对象的引用不会导致该子对象被自动删除。 父子关系的级联(cascading)操作准确语义如下:
如果父对象被persist(),那么所有子对象也会被persist()
如果父对象被merge(),那么所有子对象也会被merge()
如果父对象被save(),update()或 saveOrUpdate(),那么所有子对象则会被saveOrUpdate()
如果某个持久的父对象引用了瞬时(transient)或者脱管(detached)的子对象,那么子对象将会被saveOrUpdate()
如果父对象被删除,那么所有子对象也会被delete()
除非被标记为cascade="delete-orphan"(删除“孤儿”模式,此时不被任何一个父对象引用的子对象会被删除), 否则子对象失掉父对象对其的引用时,什么事也不会发生。 如果有特殊需要,应用程序可通过显式调用delete()删除子对象。
最后,注意操作的级联可能是在调用期(call time)或者写入期(flush time)作用到对象图上的。所有的操作,如果允许,都在操作被执行的时候级联到可触及的关联实体上。然而,save-upate和delete- orphan是在Session flush的时候才作用到所有可触及的被关联对象上的。
本文只是大概的说明了Hibernate传播性持久化的应用,可能还有不足的地方,读者可以查更多的书去了解。
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1142要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 881用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5662007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 798Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1246在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1892Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 981Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 946使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 938Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 101310.1.2 事务和事务边界 http://book.51ct ... -
事务传播行为种类
2011-03-31 15:31 819事务传播行为种类 Spring在TransactionDef ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 860* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1204使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 1003* Hibernate Session缓存 ... -
解说Hibernate的工作原理实例
2011-03-31 15:26 871* 解说Hibernate的工作原理实例 ... -
简述Hibernate配置连接池
2011-03-31 15:25 841* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 979* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 892* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 768* 概述Hiber ...
相关推荐
10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 11.1.3. 关注对象标识...
在IT领域,特别是Java企业级应用开发中,Spring框架与Hibernate技术是构建高效、可维护的数据持久层的关键组件。从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出以下关键知识点: ### Spring与...
12.1 传播性持久化 12.1.1 按可到达性持久化 12.1.2 把级联应用到关联 12.1.3 使用传播性状态 12.1.4 利用JPA的传播性关联 12.2 大批量和批量操作 12.2.1 使用HQL和JPA QL的大批量语句 ...
《Spring Persistence with Hibernate》这本书聚焦于使用Spring框架与Hibernate结合来构建强大且可靠的持久化解决方案,适用于企业级Java应用程序。Spring框架是一个全面的后端开发框架,而Hibernate则是一个流行的...
它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的数据访问与管理。在实际应用中,事务处理是确保数据一致性和完整性的关键环节之一。本文将深入探讨Hibernate中的事务处理机制,并通过具体...
Hibernate通过使用XML文件或注解来实现映射,极大地简化了数据持久化层的代码,并且提高了开发效率。Hibernate3作为该框架的一个版本,提供了对数据库操作的抽象,使得开发者可以更加专注于Java代码,而不必深入了解...
本部分主要涵盖了第21、22、23章的内容,涉及到了Hibernate在数据持久化、查询优化以及事务管理等多个关键领域的实现细节。 Chapter 21:持久化机制详解 在这一章节中,孙卫琴深入讲解了Hibernate的实体管理和持久...
综上所述,“hibernate.zip”文件中的内容应该涵盖了关于Hibernate框架的各个方面,包括基本概念、配置、映射、持久化操作、事务管理、缓存、关联映射、延迟加载以及事件监听。开发者可以通过解压和学习这些内容,...
Hibernate是一款开源的对象关系映射(Object Relational Mapping,简称ORM)框架,它为Java应用提供了对数据库的持久化操作支持,极大地简化了数据访问层的编码工作。该文档版本为2.1.6,主要介绍Hibernate的核心...
8. **事件监听和拦截器**:Hibernate允许注册监听器来监听特定的生命周期事件,如持久化、更新等,可以实现自定义逻辑。拦截器则是在这些事件触发前后进行额外操作的机制。 9. **类型转换和定制化**:Hibernate支持...
Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。本文档主要围绕Hibernate的最新中文...
3. **应用需求**:对象持久化支持数据的共享、检索、管理和安全性,这是互联网应用中信息传播的核心需求。 ### 如何实现对象持久化? 在Java中,实现对象持久化的主要方式有两种:对象序列化和数据库技术。 1. **...
- Session接口:主要负责对象的持久化操作,如保存、更新、删除和查询。 - Criteria和HQL:两种查询语言,HQL是面向对象的查询,Criteria提供API进行动态查询。 2. Spring整合Hibernate: - 依赖注入:Spring...
**Hibernate 3.1:持久化框架的基石** Hibernate 是一个强大的开源对象关系映射(ORM)框架,它为Java开发者提供了数据持久化的解决方案。在Hibernate 3.1版本中,这个框架进一步完善了其功能,提升了性能,并增强...
10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 11.1.3. 关注对象标识...