2014-06-06 22 views
0

我正在使用JDO on app engine。出于某种原因,这种方法PersistenceManagergetObjectById回报:使用getObjectById获取实体时出错:javax.jdo.JDOObjectNotFoundException:没有这样的对象

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的对象。为什么这个异常被抛出?

+0

不,它清楚地表明数据存储具有特定的“表”,该表具有具有该id长整型值的列。既然你没有告诉它看“表”,它怎么知道去哪里看?看到答案 –

回答

2

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

因此,该方法的典型特征应该是这样的:

getObjectById(Class arg0, Object arg1);

其中为arg0是,你试图检索即Image.class类和ARG1是关键值对象。

相关问题