精华帖 (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的自动发现和回收。 |
|
返回顶楼 | |
发表时间: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的策略是怎样的!
|
|
返回顶楼 | |
发表时间:2004-12-13
对了,Charles,请教一个问题:
按照JDO遵守的按照可达性进行持久化,当我需要删除某个PO的时候,JDO会采用何种策略?是仅仅删除该PO,还是删除该PO之外删除对该PO的引用关系,还是删除该PO,并且级联删除相关对象? 特别是后两者,有时候是需要区别对待的,JDO采用何种方式提供框架使用者控制的方式? 如果是Hibernate,是配置cascade属性,对应上面三种情况分别是: cascade="none" cascade="delete" cascade="delete-orphan" |
|
返回顶楼 | |
发表时间: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都设为他的默认值。 |
|
返回顶楼 | |
发表时间:2004-12-14
引用 因为假如只是变化一个小属性,并只希望产生更新该对象的语句,那么要在class加上dymatic-update=true
不是很明白为什么要要这么做。JDO会自动发现被改变的属性,并产生更新该对象的这个属性的sql。Persistence-by-Reachability主要用在makePersistent, attach/detach。delete是需要精确控制的。 |
|
返回顶楼 | |
发表时间:2004-12-14
引用 不是很明白为什么要要这么做。JDO会自动发现被改变的属性,并产生更新该对象的这个属性的sql
不错,在hibernate2.1版本还没这样的特性。大概在hibernate的wiki里有人写过一篇文章在hibernate实现这种功能,但要实现一个接口,并且要在po里添加些代码。 |
|
返回顶楼 | |
发表时间:2004-12-28
引用 不错,在hibernate2.1版本还没这样的特性。大概在hibernate的wiki里有人写过一篇文章在hibernate实现这种功能,但要实现一个接口,并且要在po里添加些代码
hibernate好像早就有这个功能了吧 |
|
返回顶楼 | |