使用Java,如何实例化GAE数据存储区以便它可以与GqlQuery一起使用?

时间:2015-03-31 19:41:57

标签: 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可能会导致您的应用在没有出现警告的情况下中断。”

任何人都有任何关于如何解决此问题的建议?哪个进口使用?或者我可以关注这个主题的任何教程?我会很感激。谢谢!

-Sil

1 个答案:

答案 0 :(得分:1)

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

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

尽管似乎GQL比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