detachCopy正在使用ObjectDB处理JDO?

时间:2012-06-12 15:56:13

标签: java spring persistence jdo objectdb

pm.detachCopy正在运作?

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

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

这是一个示例代码。

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

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

可分离设置为“true”。

和dao是

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

应用context.xml中

    <bean id="pmf" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
        <property name="jdoProperties">
            <props>
               <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">admin</prop>
               <prop key="javax.jdo.option.ConnectionPassword">admin</prop>
            </props>
        </property>
    </bean>
    <bean id="jdoTransactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
        <property name="persistenceManagerFactory">
            <ref local="pmfProxy"/>
        </property>
    </bean>
    <bean id="pmfProxy" class="org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy">
        <property name="targetPersistenceManagerFactory" ref="pmf"/>
        <property name="allowCreate" value="true"/>
    </bean>

1 个答案:

答案 0 :(得分:0)

JDO需要增强所有可持久化类。 ObjectDB支持使用没有增强功能的可持久类,作为JDO的扩展,但并非所有JDO功能都支持该模式。

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

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

  

obj =&gt;新持久

     

detachedObj =&gt;超脱清洁