首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

转:hibernate之传播性持久化(把级联应用到联系关系)

2012-10-29 
转:hibernate之传播性持久化(把级联应用到关联)hibernate之传播性持久化(把级联应用到关联)hibernate允许

转:hibernate之传播性持久化(把级联应用到关联)

hibernate之传播性持久化(把级联应用到关联)

hibernate允许你给每个关联映射指定一种级联样式,它为所有的状态转变提供了更多灵活和更细粒度的控制。
hibernate读取被声明的样式,并自动把操作级联到被关联的对象。在xml映射元数据中,把cascade="..."属性放
在<one-to-one>或者<many-to-one>映射元素中,来启用传播状态变化。所有的集合映射(<set>,<bag>,<
list>,<map>)都支持cascade属性。然而,delete-orphan设置只适用于集合。很显然,你永远不必给引用值类
型类的集合启用传播性持久化---这里被关联对象的生命周期是依赖和隐式的。依赖型生命周期的细粒度控制只与实
体之间的关联相关。

XML属性 ? ? ? ? ??注解

------- ? ? ? ? ??--------

None ? ? ? ? ? ? ?(默认)Hibernate忽略关联

save-update ? ? ??org.hibernate.annotations.CascadeType.SAVE_UPDATE

?? ? ? ? ? ? ? ? ?当Session被清除,且对象被传递到save()或者update()时,Hibernate就导航关联,
并保存刚刚被实例化的瞬时实例和把变化持久化到脱管状态的实例。

persist ? ? ? ? ??javax.persistence.CascadeType.PERSIST

?? ? ? ? ? ? ? ? ?当对象传递到persist()时,hibernate使任何被关联的瞬时实例都变成持久化。如果
使用原生的Hibernate,级联则只在调用时发生。如果使用EntityManager模块,这项操作则在持久化上下文
清除时被级联。

merge ? ? ? ? ? ??javax.persistence.CascadeType.MERGE

?? ? ? ? ? ? ? ? ?Hibernate导航关联,并在对象传递到merge()时,通过相当的持久化实例合并被关
联的脱管实例。可到达的瞬时实例被变成持久化。

delete ? ? ? ? ? ?org.hibernate.annotations.CascadeType.DELETE

?? ? ? ? ? ? ? ? ?当对象被传递到delete()或者remove()时,Hibernate就导航关联,并删除被关联的
持久化实例。

remove ? ? ? ? ? ?javax.persistence.CascadeType.REMOVE ? ? ? ??

?? ? ? ? ? ? ? ? ?当对象被传递到remove或者delete()时,这个选项就把级联删除启用到被关联的持
久化实例。

lock ? ? ? ? ? ??org.hibernate.annotations.CascadeType.LOCK

?? ? ? ? ? ? ? ? ?这个选项把lock操作级联到被关联的实例,如果对象是脱管的,就把它们重附到持
久化上下文。注意LockMode没有被级联:Hibernate假设你在被关联对象上不想要悲观锁---例如,因为根
对象上的悲观锁已经足以避免并发修改。

replicate ? ? ? ??org.hibernate.annotations.CascadeType.REPLICATE

?? ? ? ? ? ? ? ? ?hibernate导航该关联,并把replicate()操作级联到被关联的对象

evict ? ? ? ? ? ??org.hibernate.annotations.CascadeType.EVICT

?? ? ? ? ? ? ? ? ?当对象被传递到hibernate Session中的evict()时,hibernate从持久化上下文清
除被关联的对象

refresh ? ? ? ? ??javax.persistence.CascadeType.REFRESH

?? ? ? ? ? ? ? ? ?当对象被传递到refresh()时,hibernate从数据库中重新读取被关联对象的状态。

all ? ? ? ? ? ? ??javax.persistence.CascadeType.ALL

?? ? ? ? ? ? ? ? ?这项设置包括并启用前面列出的所有级联选项。

deleteorphan ? ? ?org.hibernate.annotations.CascadeType.DELETE_ORPHAN

?? ? ? ? ? ? ? ? ?当被关联的对象从关联(即集合中)被移除时,这项额外的特殊设置启用了它们的删
除。如果你在一个实体集合中启用这项设置,就等于告诉hibernate:被关联的对象没有共享的引用,且当
引用从集合中被移除时,它可以被安全地删除

---------- ? ? ? ? ? ? ? ? ?

注意:几个级联可以以逗号分隔的列表应用到特定的关联。还要注意:delete-orphan没有包括在all中。

原文:http://blog.csdn.net/fhd001/archive/2010/10/12/5934703.aspx

?

热点排行