2012-06-10 167 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自动交易设置)。我在创建和保持一个新的持久实体时总是使用事务。如果上述更改无效,您可能需要尝试。

相关问题