gpt4 book ai didi

java - 应用引擎 : different results for same objectify query

转载 作者:行者123 更新时间:2023-11-30 03:28:03 26 4
gpt4 key购买 nike

我正在使用应用程序引擎开发一个小型后端。现在,在使用不同的值多次保存实体后,我得到了一些奇怪的行为。我用于加载实体的代码对于所有实体都是相同的 - 每个实体都会获得一个changeId,因此我只能将更改的实体传输到客户端:

public class VersionableRecordHelper<T extends VersionableRecord> {

final Class<T> clazz;

public VersionableRecordHelper(Class<T> clazz) {
this.clazz = clazz;
}

Query<T> load() {
return ofy().load().type(clazz);
}

List<T> loadOrdered() {
return load().order("changeId").list();
}

public List<T> loadOrdered(Long since) {
return since == null ? loadOrdered() : load().filter("changeId >", since).order("changeId").list();
}

}

然后,客户端可以通过提供 since 值来查询某个类的所有对象。例如:

private final VersionableRecordHelper<Cat> helper
= new VersionableRecordHelper<>(Cat.class);

// actually an @ApiMethod, simplified here
public List<Cat> getCats(Long since) {
return helper.loadOrdered(since);
}

我的猫实体如下所示:

@Entity
@Cache
@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)
public class Cat extends VersionableRecord {
// some fields, getters, setters
}

public class VersionableRecord {
@Id
private String id;

@Index
private Long changeId;

// getters, setters and more
}

现在,如果我使用 since == 4 执行相同的 REST 请求,我会得到完全不同的结果 - 有时,changeId == 5,但也2、3 或 4 - 这根本不可能!

我完全迷失在这里。这是我检查过的:

  • 测试期间我没有更改记录。事实上,90 多分钟里我完全没有理会这些记录。
  • 我检查发现只有一个应用引擎实例正在运行。
  • 我尝试刷新内存缓存 - 但相同的 2 个 ObjectifyCache 键仍然存在。
  • 内存缓存服务级别为“共享”。
  • 我检查了 since 的值是否不为 null。所以代码肯定会被执行。
  • 目前我使用的是 objectify 版本 5.0.3。从我的 build.gradle 中: compile 'com.googlecode.objectify:objectify:5.0.3'
  • 我还通过检查https://console.developers.google.com/project/project-id/datastore/query?authuser=0来确保实体在数据存储中具有正确的changeId

有人有什么有用的想法吗?我还检查了不同类型的实体 - 相同的行为。

最佳答案

大胆猜测,这与常见问题解答 #3 有关:

https://code.google.com/p/objectify-appengine/wiki/FrequentlyAskedQuestions#Strange_things_are_showing_up_in_my_session_cache!_(or_missing_f

或者,当 googlecode 死掉时,第三个会下降:

https://github.com/objectify/objectify/wiki/FrequentlyAskedQuestions

您需要安装ObjectifyFilter,否则您会将 session 数据渗透到后续请求中。升级到更新版本的 Objectify;它会给你一个更明确的错误(以复杂化测试和远程 API 使用为代价,但这是一个不同的故事)。

如果这不是您的问题,您需要更详细地描述您的确切代码。

关于java - 应用引擎 : different results for same objectify query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com