对象未存储在Google App Engine数据存储区中

时间:2012-06-10 00:53:58

标签: java google-app-engine google-cloud-datastore

我在数据存储区中存储对象时遇到问题。我有一个对象MyObject,我正在尝试存储但是当代码执行时没有任何反应。我去查看数据存储仪表板,MyObject不在那里。没有抛出异常,也没有错误。

这是我的对象

@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();
    }
}

有人能看到我错过的东西吗?

1 个答案:

答案 0 :(得分: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自动事务设置)。在创建和持久化新的持久实体时,我总是使用事务。如果上述更改无效,您可能想尝试一下。