【问题标题】:Error while getting Entity using getObjectById : javax.jdo.JDOObjectNotFoundException: No such object使用 getObjectById 获取实体时出错:javax.jdo.JDOObjectNotFoundException:没有这样的对象
【发布时间】:2014-06-06 04:38:41
【问题描述】:

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

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;
    }

调试:

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

【问题讨论】:

  • 不,它清楚地表明数据存储有一个特定的“表”,其中有一列具有该 id long 值。既然你没有告诉它看它的“表”,它怎么知道在哪里看?查看答案

标签: java google-app-engine jdo


【解决方案1】:

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

所以,该方法的典型签名应该是这样的:

getObjectById(Class arg0, Object arg1);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多