detachCopy está trabajando en JDO con ObjectDB?
Frecuentes
Visto 182 veces
1
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
1 Respuestas
0
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 java spring persistence jdo objectdb or haz tu propia pregunta.