【问题标题】:How can I specify a default value for a field in a JDO entity on appengine?如何为 appengine 上的 JDO 实体中的字段指定默认值?
【发布时间】:2010-12-09 22:15:40
【问题描述】:

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

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    是的,尽管没有您想象的那么简单。

    限制

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

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多