DatastoreにLow Level APIでデータの更新をかける2

@iwasaki 20views 更新:2014年11月28日

Datastoreの更新時に新しいカラムを追加する場合は

addProperty

メソッドを使います。

slim3を使っていて既存のカラムの schemaVersion などを更新したい場合はindexを指定して

setProperty

メソッドを使います。

Propertyの順番なんぞわからん、という場合は一旦今のPropertyを取ってきて、該当するカラムのindexを取得して、そこに対して更新をかけます。ちょっとしょっぱいやり方なのでもっと他に良い方法があれば教えて下さい。

 /**
   * @param listComments
   * @param roomModel
   * @throws Exception
   */
  public static void setOrgId(Entity model, String hoge)
      throws DatastoreException {

    BeginTransactionRequest.Builder treq = BeginTransactionRequest.newBuilder();
    BeginTransactionResponse tres = datastore.beginTransaction(treq.build());
    ByteString tx = tres.getTransaction();

    CommitRequest.Builder request = CommitRequest.newBuilder();
    request.setTransaction(tx);
    Entity.Builder entity = Entity.newBuilder(model);
    entity.addProperty(Property.newBuilder().setName("hoge").setValue(
      Value.newBuilder().setStringValue(hoge)));
    // あわせてschemaVersionを更新する
    List<Property> propertyList = entity.getPropertyList();
    for (int i = 0; i < propertyList.size(); i++) {
      String name = propertyList.get(i).getName();
      if ("sV".equals(name)) {
        entity.setProperty(i, Property.newBuilder().setName("sV").setValue(
          Value.newBuilder().setIntegerValue(2)));
      }
    }

    request.getMutationBuilder().addUpdate(entity);

    CommitResponse response = datastore.commit(request.build());

    request.clearTransaction();
  }

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません