这是在Google Cloud Datastore中使用Java按键查询的正确方法吗?

时间:2014-10-05 03:53:38

标签: java google-cloud-datastore

// Use Query.Builder to assemble a query
Query.Builder q = Query.newBuilder();
q.addKindBuilder().setName("Trivia");
q.setFilter(makeFilter("__key__", PropertyFilter.Operator.EQUAL,
makeValue(makeKey("Trivia", "hgtg"))));

// Assemble a RunQueryRequest
RunQueryRequest request = RunQueryRequest.newBuilder().setQuery(q).build();
RunQueryResponse response = Main.datastore.runQuery(request);

Key是hgtg,而Kind是Trivia。

此外,此查询是否会被视为非常一致?据我所知,这只是查询一个实体组,所以它应该非常一致。

谢谢!

编辑:我问的是Google Cloud Datastore,它的Java API与App Engine不同。

1 个答案:

答案 0 :(得分:1)

根据Cloud Datastore "getting started in Java" page,您应该使用LookupRequest

  // Create an RPC request to begin a new transaction.
  BeginTransactionRequest.Builder treq = BeginTransactionRequest.newBuilder();
  // Execute the RPC synchronously.
  BeginTransactionResponse tres = datastore.beginTransaction(treq.build());
  // Get the transaction handle from the response.
  ByteString tx = tres.getTransaction();

  // Create an RPC request to get entities by key.
  LookupRequest.Builder lreq = LookupRequest.newBuilder();
  // Set the entity key with only one `path_element`: no parent.
  Key.Builder key = Key.newBuilder().addPathElement(
      Key.PathElement.newBuilder()
      .setKind("Trivia")
      .setName("hgtg"));
  // Add one key to the lookup request.
  lreq.addKey(key);
  // Set the transaction, so we get a consistent snapshot of the
  // entity at the time the transaction started.
  lreq.getReadOptionsBuilder().setTransaction(tx);
  // Execute the RPC and get the response.
  LookupResponse lresp = datastore.lookup(lreq.build());
  // Create an RPC request to commit the transaction.
  CommitRequest.Builder creq = CommitRequest.newBuilder();
  // Set the transaction to commit.
  creq.setTransaction(tx);
  Entity entity;
  if (lresp.getFoundCount() > 0) {
    entity = lresp.getFound(0).getEntity();
  }

至于强一致性,查找总是非常一致as written here

  

请记住,如果您执行查找,祖先查询或任何操作   在交易中,您将始终看到最近写的   数据