2011-09-03 113 views
0

我正在制作一个简单的GWT,GAE,JDO应用程序。首先,我试图存储Cat Records的表格。我设法让我的调用中使用RPC机制来保存数据(请参阅下面的setCOTDCats())。据我所知,RPC调用是成功的。但是,当我尝试读取值(请参阅下面的getCOTDCats())时,它似乎也能工作,只是它返回空结果。GAE JDO空查询结果

显然无论保存没有工作,或读取没有,但我不知道如何判断哪些不起作用。

我是GAE和JDO Newbie。请对此进行回应。

感谢

没有蛇鲨请

@Override 
public Cat[] getCOTDCats() 
{ 
    final List<Cat> catList = new ArrayList<Cat>(); 
    final PersistenceManager pm = getPersistenceManager(); 
    try 
    { 
     final Query q = pm.newQuery(CatRecord.class); 
     q.setOrdering("COTDDate"); 
     final List<CatRecord> catRecords = (List<CatRecord>) q.execute(); 
     for (CatRecord catRecord: catRecords) 
     { 
      final Cat cat = catRecord.getCat(); 
      catList.add(cat); 
     } 
    } 
    finally 
    { 
     pm.close(); 
    } 
    final Cat[] result = catList.toArray(new Cat[0]); 
    return result; 
} 

/* (non-Javadoc) 
* @see org.catadoptionteam.catserve.client.AnimalDataService#setCOTDCats(org.catadoptionteam.catserve.shared.Cat[]) 
*/ 
@Override 
public void setCOTDCats(Cat[] cat) 
{ 
    final List<CatRecord> catList = new ArrayList<CatRecord>(); 
    for (Cat c: cat) 
    { 
     final CatRecord catRecord = new CatRecord(c); 
     catList.add(catRecord); 
    } 
    final PersistenceManager pm = getPersistenceManager(); 
    try 
    { 
     pm.makePersistentAll(catList); 
    } 
    finally 
    { 
     pm.close(); 
    } 
} 

private static PersistenceManager getPersistenceManager() 
{ 
    final PersistenceManager result = Persister.getPersistenceManager(); 
    return result; 
} 

public enum Persister 
{ 
    INSTANCE; 

    private static final PersistenceManagerFactory pmfInstance = 
     JDOHelper.getPersistenceManagerFactory("transactions-optional"); 

    public static PersistenceManager getPersistenceManager() 
    { 
     final PersistenceManager result = pmfInstance.getPersistenceManager(); 
     return result; 
    } 
} 
+0

今天我花了不同的尝试。我似乎现在正在获取数据,但这是不正确的。我删除了我的PersistenceCapable CatRecord中的一些字段。我想知道是否有一个(或更多)我的数据类型无法使用?我使用Key,String,Date,boolean,Text和我定义的枚举。 – Mitch

+1

local_db查看器告诉你保存是否有效。日志还会告诉你很多东西 – DataNucleus

+0

现在看来它工作得更好了。我不确定哪里出了问题。我发现删除war/WEB-INF/appengine-generated/*文件似乎有所帮助。我不知道这是不是一个好主意。我只通过试验和错误发现了这一点。 – Mitch

回答

0

也许问题就出在你处理的PersistenceManager的方式。定义一个类PMF.java如下:

import javax.jdo.JDOHelper; 
import javax.jdo.PersistenceManagerFactory; 

public final class PMF { 
    private static final PersistenceManagerFactory pmfInstance = JDOHelper 
      .getPersistenceManagerFactory("transactions-optional"); 

    private PMF() { 
    } 

    public static PersistenceManagerFactory get() { 
     return pmfInstance; 
    } 
} 

然后,当你想进入的PersistenceManager,你应该叫:

PersistenceManager pm = PMF.get().getPersistenceManager(); 

此外,所有模型(猫在你的榜样)应该用JDO来定义。详细信息请查看:http://code.google.com/appengine/docs/java/datastore/jdo/

希望这有助于!

+0

谢谢,我在上面添加了关于我使用PersistenceManager所做的更多细节。对我来说似乎也一样。 – Mitch

+0

我想我已经定义CatRecord和猫为@PersistenceCapable(identityType = IdentityType.APPLICATION,可拆卸= “真”) 公共final类CatRecord { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 私人密钥ID; ... – Mitch

+0

如果有帮助,我可以发布更多的代码。有没有一个数据库浏览器工具,可以让我看看写入是否有效? – Mitch