2011-09-03 108 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