2012-06-12 2 views
1

pm.detachCopy работает?detachCopy работает над JDO с ObjectDB?

Я создаю программу 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 
} 

съемными установлен в "истина".

и дао является

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> 

ответ

0

СДО требует усиления всех persistable классов. ObjectDB поддерживает использование устойчивых классов без расширения, как расширение JDO, но не все функции JDO могут поддерживаться в этом режиме.

В частности, при использовании экземпляров неактивных классов, совместимых с постоянством, временные и отдельные объекты выглядят одинаково (поскольку в классе отсутствуют дополнительные поля, которые добавляются во время улучшения, чтобы содержать дополнительную информацию).

Запуск теста с классом TestModel расширения обеспечивает ожидаемый результат:

OBJ => настойчивый-новый

detachedObj => отдельностоящий-чистый

 Смежные вопросы

  • Нет связанных вопросов^_^