使用GAEJ和JDO存储数据时遇到问题。 这就是我正在使用的:
类Usuari.java:
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String email;
@Persistent
private String rol="";
类DBUtils.java: 我尝试了两种执行删除操作的方法:
// 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;
}
}
我能够创建一些类“Usuari”的新实例,但我无法删除它们。 每当我调用“eliminar”或“eliminar2”方法时,我会因尝试获取它而获得“无此对象”。我已手动检查,我看到对象存在于我的管理面板中,其ID和KIND,所以我不知道我做错了什么。
非常感谢任何帮助。
答案 0 :(得分:0)
PM.getObjectById
不接受Key
对象。它接收一个身份对象,与pm.getObjectId(obj)
中的对象类型相同;建议你浏览一下JDO规范。毫无疑问,如果您检查了从此方法返回的内容,您会发现它无法找到具有该“身份”的对象,因为密钥不是标识。你也可以
pm.getObjectById(Usuari.class, key);
在GAE文档中非常清楚地显示。
仍然不明白为什么用户将@Persistent放在每个字段上几乎每个类型都是默认持久性的;只会导致代码更难以理解。