java - 如何为 Appengine 上的 JDO 实体中的字段指定默认值?

标签 java google-app-engine jdo

我最近向我的一个不能为空的实体添加了文本字段。我想为其设置一个默认值,以便我在添加该字段之前存储的所有实体都将填充一个空字符串。这可以用 JDO 实现吗?

最佳答案

是的,尽管并不像您预期​​的那么微不足道。

限制

  1. 威尔 time out if it takes more then 30 seconds , 除非您将其作为任务运行,其中 万一它会time out if it takes more then 10 minutes .
  2. 没有比这更聪明的方法了 之后需要更新的实体 你can't query on a property that doesn't exist .

解决方法

  1. 您需要查看 appengine-mapreduce project到 得到一个可以实现的实现 完成超过 10 分钟 挂钟时间。
  2. 未知。

代码

void updateNullBarField() {
  final Text DEFAULT_BAR = new Text("bar");

  PersistenceManagerFactory pmfInstance = JDOHelper
    .getPersistenceManagerFactory("transactions-optional");
  PersistenceManager pm = pmfInstance.getPersistenceManager();
  Query query = pm.newQuery(Foo.class);
  @SuppressWarnings("unchecked")
  Collection<Foo> foos = pm.detachCopyAll((List<Foo>) query.execute());

  for (Foo foo : foos) {
    if (foo.bar == null) {
      foo.bar = DEFAULT_BAR;
      pm.detachCopy(pm.makePersistent(foo));
    }
  }
}

关于java - 如何为 Appengine 上的 JDO 实体中的字段指定默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403698/

相关文章:

Java:当 B 扩展 A 时,A x = new A() 和 A x = new B() 之间的区别

python - 使用 Google 应用引擎的 webapp2 装饰器路由

python - GAE(AppEngine)似乎在发布后调整了我的图像大小

node.js - 谷歌数据存储中的 Node 分页

java - 与@BeforeClass 等效的 TestNG 监听器,可以访问上下文

java - Popup JDialog 是否有默认的 java 类?

java - 无法在 GAE 后台线程中使用 JDO

java - 如何在 App Engine 数据存储区中将 'int' Java 模型属性设置为其原始未设置状态而不是零?

Java 适本地处理异常

java - Google Appengine - id 为 "com.google.appengine.api.datastore.Key:Product("Potatoe 的对象")"由不同的对象管理器管理