【问题标题】:Object not storing in Google App Engine datastore对象未存储在 Google App Engine 数据存储区中
【发布时间】:2026-02-08 00:50:01
【问题描述】:

我在数据存储中存储对象时遇到问题。我有一个我正在尝试存储的对象 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();
    }
}

谁能看到我错过了什么?

【问题讨论】:

  • 我遇到了类似的问题,直到我放弃并转而使用objectify。我会打电话给pm.makePersistent,datanucleus 会生成一个 FINE 级别的日志,上面写着“对象状态 n_persistent => 空心”或类似的东西,然后就好像一切正​​常一样返回。完全失去信心需要发生几次这样的事件。

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


【解决方案1】:

看起来您正在使用 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 自动事务设置)。在创建和持久化新的持久实体时,我总是使用事务。如果上述更改不起作用,您可能想尝试一下。

【讨论】: