使用getObjectById获取实体时出错:javax.jdo.JDOObjectNotFoundException:没有这样的对象

时间:2014-06-06 04:38:41

标签: java google-app-engine jdo

我正在使用JDO on app engine。出于某种原因,getObjectById的方法PersistenceManager会返回:

No such object
org.datanucleus.exceptions.NucleusObjectNotFoundException: No such object

public Image getById(long id) {
        Image img = null;
        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            img = (Image) pm.getObjectById(id);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            pm.close();
        }
        return img;
    }

在此文件的其他部分,我可以使用Query成功检索所有实体:

 public List<Image> getAll() {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        List<Image> results = null;
        Query q = pm.newQuery(Image.class);
        q.setOrdering("date desc");
        try {
            results = (List<Image>) q.execute();
        } finally {
            q.closeAll();
        }
        return results;
    }

调试: enter image description here enter image description here

显示/显而易见的是,数据存储区保存了请求id的对象。为什么会抛出这个异常?

1 个答案:

答案 0 :(得分:2)

您需要指定要检索的对象的类。

因此,该方法的典型签名应该是:

getObjectById(Class arg0, Object arg1);

其中arg0是您要检索的类,即Image.class,而arg1是键值对象。