论坛首页 Java企业应用论坛

JDO和Hibernate的比较 – Persistence By Reachablilty

浏览 16251 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-13  
引用

1、必须显式的attach/detach PO,而无法像Hibernate那样自动的attach/detach呢?

Hibernate没有detach的概念,只有attach的概念。其实不是因为weak reference,而是因为JDO采用地是state machine的设计(without EJB中有论述)。state machine( JDO的StateManager)和它管理的PO在完成操作CRUD和query后都用weak reference指向。这就把是否回收这个PO完全交给用户的应用来决定。只要用户的应用不strong reference该PO, 就可以被JVM回收。


引用
一个未被持久化过的PO,我只要PM.attach(PO),他就自动被insert到数据库呢?

目前是这样,attach是用来re-attach detached object graph,如果这个detached object graph中有改动或新增加的未被持久化(transient)的PO,所有改动和新的PO在attach( root )的时候会被自动地update和insert。

但如果仅仅是要保存一个transient的PO,需要用makePersistent. 你的意见挺好,我们会考虑把attach transient PO做进去。


关于关闭PM问题,虽然PM不占用JDBC资源,如果应用许可,我们还是建议用户显式关闭PM,而不是依赖JVM的自动发现和回收。
0 请登录后投票
   发表时间:2004-12-13  
默认的Persistence By Reachablilty是需要的吗?首先如果在Persistence By Reachablilty=cascade save,update,delete??那么在以前使用hibernate的应用中,大多数时候我都会对cascade做比较精确的控制。因为假如只是变化一个小属性,并只希望产生更新该对象的语句,那么要在class加上dymatic-update=true.对于delete,显然是要精确控制。或者jdo对对象图的更新策略有所不同,所以默认Persistence By Reachablilty,我最关心的是Persistence By Reachablilty的策略是怎样的!
0 请登录后投票
   发表时间:2004-12-13  
对了,Charles,请教一个问题:

按照JDO遵守的按照可达性进行持久化,当我需要删除某个PO的时候,JDO会采用何种策略?是仅仅删除该PO,还是删除该PO之外删除对该PO的引用关系,还是删除该PO,并且级联删除相关对象? 特别是后两者,有时候是需要区别对待的,JDO采用何种方式提供框架使用者控制的方式?

如果是Hibernate,是配置cascade属性,对应上面三种情况分别是:
cascade="none"
cascade="delete"
cascade="delete-orphan"
0 请登录后投票
   发表时间:2004-12-14  
robbin 写道
对了,Charles,请教一个问题:

按照JDO遵守的按照可达性进行持久化,当我需要删除某个PO的时候,JDO会采用何种策略?是仅仅删除该PO,还是删除该PO之外删除对该PO的引用关系,还是删除该PO,并且级联删除相关对象? 特别是后两者,有时候是需要区别对待的,JDO采用何种方式提供框架使用者控制的方式?

如果是Hibernate,是配置cascade属性,对应上面三种情况分别是:
cascade="none"
cascade="delete"
cascade="delete-orphan"


JDO2有一项配置叫做Foreigh-Key:
有geattribute是delete-action(cascade|restrict|null|default)
默认是restrict,由用户自己处理删除策略;
cascade,级联删除相关对象;
null,把引用这个PO的column都设为null;
default,把引用这个PO的column都设为他的默认值。
0 请登录后投票
   发表时间:2004-12-14  
引用
因为假如只是变化一个小属性,并只希望产生更新该对象的语句,那么要在class加上dymatic-update=true

不是很明白为什么要要这么做。JDO会自动发现被改变的属性,并产生更新该对象的这个属性的sql。Persistence-by-Reachability主要用在makePersistent, attach/detach。delete是需要精确控制的。
0 请登录后投票
   发表时间:2004-12-14  
引用
不是很明白为什么要要这么做。JDO会自动发现被改变的属性,并产生更新该对象的这个属性的sql

不错,在hibernate2.1版本还没这样的特性。大概在hibernate的wiki里有人写过一篇文章在hibernate实现这种功能,但要实现一个接口,并且要在po里添加些代码。
0 请登录后投票
   发表时间:2004-12-28  
引用
不错,在hibernate2.1版本还没这样的特性。大概在hibernate的wiki里有人写过一篇文章在hibernate实现这种功能,但要实现一个接口,并且要在po里添加些代码

hibernate好像早就有这个功能了吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics