Estoy usando Google AppEngine, con Java. Cuando utilizo algunas de las características del almacén de datos, estoy recibiendo un mensaje de error:AppEngine datastore: "Objeto con id ... es administrado por un Administrador de Objetos diferente"
Object with id "[email protected]" is managed by a different Object Manager
No sé lo que esto significa o cómo solucionarlo o dónde buscar documentación sobre este error. ¿Alguien puede ayudarme? El código que estoy usando es:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class School {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private String shortname;
@Persistent
private String fullname;
@Persistent
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="code asc"))
private List<Teacher> Teachers;
...
public Teacher FindOrCreateTeacher(String code)
{
// Can we find the teacher without any database code?
Teacher newTeacher = FindTeacher(code);
if (newTeacher != null)
return newTeacher;
// Create the teacher:
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
for (Teacher teacher : Teachers) {
if (teacher.getCode() == code) {
tx.rollback();
return teacher;
}
}
newTeacher = new Teacher(code);
Teachers.add(newTeacher);
pm.makePersistent(newTeacher);
pm.makePersistent(Teachers);
tx.commit();
} finally {
tx.commit();
}
return newTeacher;
}
creo que "private List<Teacher> Teachers;
" se refiere a una "propiedad, uno a muchos" relación.
Explicación interesante. +1 – VonC
¿Puede explicarme qué duración es adecuada para una instancia de PM? Supongamos que estoy escribiendo una aplicación web. ¿Debo abrirlo y cerrarlo en cada solicitud de página? ¿O mantener una instancia abierta durante toda la vida del proceso? (Si realizo una transacción pero no cierro el MP, ¿significa esto que lo peor que ocurre es una pérdida de memoria? ¿Quiero decir que mis datos están seguros?) –
¿Cuánto dura el proceso? Un sistema web típico usaría un PM por solicitud. Crear un PM no es costoso (crear un PMF * es * costoso). Si usa txns, puede dejar un PM abierto de forma segura ... siempre que no realice actualizaciones no transaccionales también con ese PM. – DataNucleus