java - 使用 Java,如何实例化 GAE 数据存储以便它可以与 GqlQuery 结合使用?

标签 java google-app-engine constructor google-cloud-datastore gql

大家好,我正在与 Google App Engine 合作开发一个从云数据存储区存储和检索数据的项目。添加数据并写入数据没有问题,但使用 GqlQueries 检索数据却很困难。我遇到的问题是:我无法以允许我将其与 GQL 一起使用的方式实例化数据存储对象。我认为问题与使用错误的导入有关。这是我的一些代码:

.

    import com.google.appengine.api.datastore.DatastoreService;
    import com.google.appengine.api.datastore.DatastoreServiceFactory;
    import com.google.appengine.api.datastore.Key;
    import com.google.appengine.api.datastore.Entity;
    import com.google.appengine.api.datastore.KeyFactory;
    import com.google.appengine.api.datastore.Query.Filter;
    import com.google.appengine.api.datastore.*;

    import com.google.appengine.api.datastore.Query.FilterPredicate;
    import com.google.appengine.api.datastore.Query.FilterOperator;
    import com.google.appengine.api.datastore.Query.CompositeFilter;
    import com.google.appengine.api.datastore.Query.CompositeFilterOperator;
    import com.google.appengine.api.datastore.Query;
    import com.google.appengine.api.datastore.PreparedQuery;

    import com.google.apphosting.datastore.DatastoreV4.EntityResult;
    import com.google.apphosting.datastore.DatastoreV4.GqlQuery;
    import com.google.apphosting.datastore.DatastoreV4.PropertyFilter;
    import com.google.apphosting.datastore.DatastoreV4.RunQueryRequest;
    import com.google.apphosting.datastore.DatastoreV4.RunQueryResponse;

            //Build a Query
            GqlQuery.Builder query = GqlQuery.newBuilder().setQueryString("SELECT * FROM Person");
            RunQueryRequest request = RunQueryRequest.newBuilder().setGqlQuery(query).build();

            RunQueryResponse response = datastore.runQuery(request);
            List<Entity> results = new ArrayList<Entity>();
            for (EntityResult entityResult : response.getBatch().getEntityResultList()) {
              results.add(entityResult.getEntity());
            }

    /* This is the Datastore object I was initializing. It initializes just fine but
    it cannot invoke the runQuery(request) method; nor will it allow me to add items to the 
list of entities, keeps saying that they are not of similar type. 
    */
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

通过屏幕截图,您可以看到有许多不同的导入选项,似乎无论我选择哪一个都会导致某种问题。 enter image description here .

任何使用重新打包的导入都会显示此弹出窗口:“使用 com.google.appengine.repackaged 可能会导致您的应用在没有警告的情况下崩溃。”

有人对如何解决这个问题有任何建议吗?使用哪些进口产品?或者我可以遵循有关该主题的任何教程吗?我会很感激。谢谢!

-锡

最佳答案

根据文档 [1],您可能需要使用此导入:

import static com.google.apphosting.client.datastoreservice.client.DatastoreHelper.*;

尽管如此,Python 似乎比 Java 更支持 GQL。大多数有关 GQL 的文档都是针对 Python 编写的,在 JAVA 部分 [2] 上没有具体的引用资料,但对于 Python GQL 的模拟部分,引用了 [3]。

[1] https://cloud.google.com/datastore/docs/concepts/gql

[2] https://cloud.google.com/appengine/docs/java/datastore/queries

[3] https://cloud.google.com/appengine/docs/python/ndb/queries#gql

关于java - 使用 Java,如何实例化 GAE 数据存储以便它可以与 GqlQuery 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377162/

相关文章:

php - 使用AppEngine创建云存储桶

java - 类构造函数中的字段初始化 : direct or through "setter"?

java - java新手想了解执行流程

java - 如何使用2个以上的ToggleButtons来获取按钮的总值?

java - 创建芝麻存储库

java - 如何使用 JSoup 通过标签获取元素? - java

java - 毕业生 :appengineEnhance fails

java - 在 GAE 中使用 Log4j 2 的问题

java - 基于多个条件排序并使用java中的其他列表

C++ 禁止声明没有类型的 'binaryTreeType'