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