繁体   English   中英

Java Google App Engine按键获取实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM