gpt4 book ai didi

java - detachCopy 正在与 ObjectDB 一起使用 JDO 吗?

转载 作者:行者123 更新时间:2023-12-01 05:17:00 25 4
gpt4 key购买 nike

pm.detachCopy 正在工作吗?

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

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

这是一个示例代码。

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

应用程序上下文.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 功能都可以在该模式下支持。

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

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

obj => persistent-new

detachedObj => detached-clean

关于java - detachCopy 正在与 ObjectDB 一起使用 JDO 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com