// 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不同。
答案 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:
请记住,如果您执行查找,祖先查询或任何操作 在交易中,您将始终看到最近写的 数据