簡體   English   中英

如何為appengine上的JDO實體中的字段指定默認值?

[英]How can I specify a default value for a field in a JDO entity on appengine?

我最近將Text字段添加到我的一個不能為null的實體中。 我想為它設置一個默認值,這樣我添加字段之前存儲的所有實體都將填充一個空字符串。 這可能與JDO有關嗎?

是的,雖然不像你想象的那樣瑣碎。

限制

  1. 除非你將它作為一項任務運行,否則超時需要超過30秒 ,在這種情況下, 如果需要超過10分鍾 ,它將會超時
  2. 沒有更聰明的方法來獲取需要更新的實體,因為您無法查詢不存在的屬性

解決方法

  1. 您將需要查看appengine-mapreduce項目,以獲得可以在超過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));
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM