[英]java google app engine get entity by key
使用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,所以我不知道我在做什么错。
任何帮助将非常感激。
根据JDO规范, PM.getObjectById
不接受Key
对象。 它接受一个标识对象,该对象与您从pm.getObjectId(obj)
获得的类型相同; 建议您浏览JDO规范。 毫无疑问,如果您检查了此方法返回的内容,您会发现它找不到具有“身份”的对象,因为键不是身份。 你也可以
pm.getObjectById(Usuari.class, key);
GAE文档中非常清楚地显示了这一点。
仍然不知道为什么用户在每个字段上都使用@Persistent,实际上每种类型都是默认的持久性; 只会导致代码更不可读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.