detachCopy使用ObjectDB处理JDO?

pm.detachCopy正在运行?

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

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

这里是一个示例代码。

我有一个简单的测试模型(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

应用程序的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>

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

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

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

obj =>持久新

detachedObj =>分离清理

链接地址: http://www.djcxy.com/p/60295.html

上一篇: detachCopy is working on JDO with ObjectDB?

下一篇: JPA + eclipseLink2.0 failed