1

pm.detachCopy 有效吗?

我正在制作一个 Spring + ObjectDB(JDO) 程序。

尽管@PersistenceCapable:detachable 为真,但 PersistenceManager#detachCopy 返回一个瞬态对象。

这是一个示例代码。

我有一个简单的测试模型(POJO)

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class TestModel {
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
@PrimaryKey
private Long id;
@Persistent
private String name;
// getter, setter
}

可分离设置为“真”。

道是

public class TestModelDaoImpl {
    private PersistenceManagerFactory persistenceManagerFactory;
    public void setPersistenceManagerFactory(PersistenceManagerFactory pmf) {
        this.persistenceManagerFactory = pmf;
    }

    public TestModel makePersistent(TestModel obj){
        PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        tx.begin();
        pm.makePersistent(obj);
        System.out.println(" obj => " + JDOHelper.getObjectState(obj)); //  => (1) persistent-new
        TestModel detachedObj = pm.detachCopy(obj);
        System.out.println(" detachedObj => " + JDOHelper.getObjectState(detachedObj)); // => (2) transient .. 
        tx.commit();
        return detachedObj;
        // try catch is omitted
    }
}

我想我在 (2) 处有一个超然的状态。但是是短暂的。

ObjectDB 的版本是 2.4.0_05

应用程序上下文.xml

    <bean id="pmf" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
        <property name="jdoProperties">
            <道具>
               <prop key="javax.jdo.PersistenceManagerFactoryClass">com.objectdb.jdo.PMF</prop>
               <prop key="javax.jdo.option.ConnectionURL">$objectdb/db/testdb.odb</prop>
               <prop key="javax.jdo.option.ConnectionUserName">管理员</prop>
               <prop key="javax.jdo.option.ConnectionPassword">管理员</prop>
            </道具>
        </属性>
    </豆>
    <bean id="jdoTransactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
        <property name="persistenceManagerFactory">
            <ref local="pmfProxy"/>
        </属性>
    </豆>
    <bean id="pmfProxy" class="org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy">
        <property name="targetPersistenceManagerFactory" ref="pmf"/>
        <property name="allowCreate" value="true"/>
    </豆>
4

1 回答 1

0

JDO 需要增强所有可持久类。ObjectDB 支持使用没有增强的可持久类作为 JDO 的扩展,但在该模式下并非所有 JDO 特性都可以支持。

特别是,当使用非增强持久性类的实例时,瞬态对象和分离对象看起来相同(因为该类缺少在增强期间添加的额外字段以保留附加信息)。

使用增强的 TestModel 类运行测试可提供预期结果:

obj => 持久新

detachedObj => 分离清洁

于 2013-02-26T15:34:49.047 回答