detachCopy está trabajando en JDO con ObjectDB?

pm.detachCopy está funcionando?

Estoy haciendo un programa Spring + ObjectDB (JDO).

PersistenceManager#detachCopy devuelve un objeto transitorio a pesar de que @PersistenceCapable:detachable es verdadero.

aquí hay un código de muestra.

Tengo un modelo de prueba simple (POJO)

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

desmontable se establece en "verdadero".

y dao es

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
    }
}

Creo que tengo un estado desapegado en (2). pero es transitorio.

La versión de ObjectDB es 2.4.0_05

aplicación-contexto.xml

     com.objectdb.jdo.PMF $objetodb/db/testdb.odb administración administración 

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

JDO requiere la mejora de todas las clases persistentes. ObjectDB admite el uso de clases persistentes sin mejoras, como una extensión de JDO, pero no todas las características de JDO pueden admitirse en ese modo.

En particular, cuando se utilizan instancias de clases con capacidad de persistencia no mejorada, los objetos transitorios y separados tienen el mismo aspecto (ya que a la clase le faltan los campos adicionales que se agregan durante la mejora para mantener información adicional).

Ejecutar su prueba con la clase TestModel mejorada proporciona el resultado esperado:

obj => persistente-nuevo

tachadoObj => separado-limpiar

Respondido el 20 de junio de 20 a las 10:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.