I have a problem using GAEJ and JDO for storing the data.
This is what I’m working with:
class Usuari.java:
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String email;
@Persistent
private String rol="";
class DBUtils.java:
I’ve tried with two ways of doing the delete operation:
// This method removes a record from the database using its unique Key
public static boolean eliminar(Key k) throws Exception {
PersistenceManager pm = PMF.get().getPersistenceManager();
String kind;
Long id;
kind = k.getKind();
id = k.getId();
try {
if (k.getKind().equals("Usuari")) {
Usuari u = (Usuari)pm.getObjectById(k);
pm.deletePersistent(u);
_log.log(Level.INFO, "Deleted an entity->kind: " + kind + " id: " + id);
}
return true;
} catch (Exception e) {
_log.log(Level.SEVERE, "Unable to delete an entity->kind: " + kind + " id: " + id);
System.err.println(e.getMessage());
throw e;
}
finally {
pm.close();
}
}
// This method removes a record from the database using its unique Key - too
public static void eliminar2(Key k) throws Exception {
PersistenceManager pm = PMF.get().getPersistenceManager();
javax.jdo.Transaction tx = pm.currentTransaction();
try
{
tx.begin();
if (k.getKind().equals("Usuari")) {
Usuari u = (Usuari) pm.getObjectById(k);
pm.deletePersistent(u);
}
tx.commit();
}
catch (Exception e)
{
if (tx.isActive())
{
tx.rollback();
}
throw e;
}
}
I’m able to create new instances of some class “Usuari” but I can’t delete them.
Everytime I call “eliminar” or “eliminar2” methods I get a “No such object” as result of trying to fetch it. I’ve checked manually and I see the object exists in my admin panel, with its ID and KIND, so I don’t know what am I doing wrong.
Any help would be much appreciated.
PM.getObjectByIddoes not take in aKeyobject, as per the JDO spec. It takes in an identity object, the same type as you would get frompm.getObjectId(obj); suggest you glance through the JDO spec. No doubt if you inspected what is returned from this method you would see that it can’t find an object with that ‘identity’ because a Key is not an identity. You can also dowhich is shown very clearly in GAE documentation.
Still don’t get why users are putting @Persistent on every field virtually every type is default persistent; only leads to making code more unreadable.