【问题标题】:GAE DatastoreService Query not getting any results?GAE DatastoreService 查询没有得到任何结果?
【发布时间】:2016-10-01 11:10:19
【问题描述】:

更新:如果我删除与交易相关的代码,它似乎可以工作,为什么会这样?

我在使用 GAE DatastoreService 构建简单的 hello world 时遇到了问题。我只是想把东西放进去然后列出来,下面的代码应该创建两个实体并把它们放进去,然后查询它们并把它们列出来。但是我没有得到列表,查询迭代是空的。没有错误发生。

public static void main (String[] args) throws Throwable {
  // setup HRD datastore
  LocalUserServiceTestConfig lustc = new LocalUserServiceTestConfig ();
  LocalDatastoreServiceTestConfig ldstc = new LocalDatastoreServiceTestConfig ();
  ldstc.setDefaultHighRepJobPolicyUnappliedJobPercentage (100);
  LocalServiceTestHelper helper = new LocalServiceTestHelper (lustc, ldstc).setEnvIsLoggedIn (true)
                                                                           .setEnvAuthDomain ("localhost")
                                                                           .setEnvEmail ("test@localhost");
  helper.setUp ();

  // hello world
  try {
    DatastoreService service = DatastoreServiceFactory.getDatastoreService ();
    Entity e = new Entity ("foo");
    e.setProperty ("fooey", new Text ("hello world"));
    Transaction t = service.beginTransaction (withXG (true));
    service.put (t, e);
    e = new Entity ("bar");
    e.setProperty ("bary", "goodbye world");
    service.put (t, e);
    t.commitAsync ().get ();

    System.err.println ("foo:");
    for (Entity s : service.prepare (new Query ("foo")).asIterable ())
      System.err.println (s);
    System.err.println ("bar:");
    for (Entity s : service.prepare (new Query ("bar")).asIterable ())
      System.err.println (s);
  } finally {
  // teardown
    helper.tearDown ();
  }
}

我的实际输出:

Mar 11, 2015 4:46:24 PM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized: 
    Type: High Replication
    Storage: In-memory
foo:
bar:

我希望我的实体会出现在那里,我怎么看不到它们?

编辑:

我很确定这些是完成这项工作所需的 Maven 罐子:

<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-api-1.0-sdk</artifactId>
  <version>1.9.18</version>
</dependency>
<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-testing</artifactId>
  <version>1.9.18</version>
  <!--scope>test</scope-->
</dependency>
<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-api-stubs</artifactId>
  <version>1.9.18</version>
  <!--scope>test</scope-->
</dependency>

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:

    所有没有父查询的查询最终都是一致的。您的 JUnit 设置告诉 app-engine 永远不允许最终的一致读取。特别是这一行 -

    ldstc.setDefaultHighRepJobPolicyUnappliedJobPercentage (100);
    

    改成:

    ldstc.setApplyAllHighRepJobPolicy(); // 100% consistent (impractical but easy to test)
    

    一切都会按预期进行。在生产中,您的系统将在这两种设置之间工作。最终一致的查询将在“一段时间”后显示数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多