2012-06-10 214 views
0

我在將數據存儲到數據存儲中時遇到問題。我有一個對象MyObject,我試圖存儲,但是當代碼執行時什麼都沒有發生。我去看看數據存儲儀表板,MyObject不在那裏。沒有任何例外,並且沒有錯誤。不存儲在Google App Engine數據存儲中的對象

這裏是我的對象

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class MyObject{ 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key key; 

@Persistent 
String name; 

@Persistent 
String beta; 

@Persistent 
double loc; 


public MyObject(String name1){ 
    name = name1; 
} 

//getters and setters 
} 

和這裏的存儲對象的代碼

public static void saveMyObject(MyObject a)throws Exception{ 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    try{ 
     pm.makePersistent(a); 
    } 
    catch(Exception e){ 
     throw e; 
    } 
    finally{ 
     pm.close(); 
    } 
} 

任何人都可以看到我錯過了什麼?

+0

我經歷過類似的問題,直到我放棄並切換到物化。我會調用'pm.makePersistent',並且datanucleus會生成一個FINE級別的日誌,說明「object state n_persistent => hollow」或類似的東西,並返回,就好像一切正​​常。這需要幾次事件才能完全失去信心。 – ori

回答

0

看起來你正在使用JDO,所以你可能想要麼添加JDO標籤或其他提及的地方....

我將取代

try 
{ 
    pm.makePersistent(a); 
} 

try 
{ 
    MyObject myObj = new MyObject(a.getName()); // or whatever the getter is 
    myObj.setField2(a.getField2());    // Copy 1 data member from a 
    ...           // Make a MyObject.copy(...) method? 
    pm.makePersistent(myObj); 
} 

關鍵是JDO使用增強:在主要Java編譯後插入的魔術字節碼。我在增強的生命週期(「範圍」)內操縱持久化實體對象以使JDO正常工作。

我也使用交易寫作(我不知道你的JDO自動交易設置)。我在創建和保持一個新的持久實體時總是使用事務。如果上述更改無效,您可能需要嘗試。

相關問題