GAE:比较执行JDO查询时返回错误结果的字符串值

时间:2012-02-10 14:03:31

标签: java google-app-engine jdo

对于iOS项目,我使用GAE(Java堆栈)来存储用户的设备令牌并使用它来发送推送通知。

我有一个Device实体,其中包含几个字段,包括String类型的“appVersion”字段。该数据库包含一些版本为1的设备和一些版本为2的设备。

当我运行JDO查询以查找“appVersion”等于2的所有设备时,它返回预期结果,但是当我对版本1执行相同操作时,查询不返回任何结果,尽管有实体符合此条件。

这是代码:

javax.jdo.Query query = _pm.newQuery(Device.class, "appVersion == appVersionParams");

query.declareParameters(String.class.getName()+" appVersionParams");

List<Device> results = (List<Device>) query.execute(message.getAppVersion());

我多次验证了版本1的设备实体是否正确存储(类型为String并包含正确的修剪值,它确实与我传递的参数完全匹配)。

我第一次在Dev环境中遇到这个问题,所以我删除了本地数据库并创建了测试实体并再次运行查询 - 这次它返回了版本1和2的预期结果。但是在我重新启动服务器之后返回版本1的错误结果(同时使用版本2)。希望它只是本地开发环境中的一个错误。我将它部署到生产环境中,它只返回了4个实体(有几千个符合这个条件) - 所有实体都以相同的方式/ API存储。

我还尝试从JDO切换到低级API来获取实体但我得到了同样奇怪的行为。这是它的代码:

Query q = new Query("Device");
q.addFilter("appVersion", FilterOperator.EQUAL, message.getAppVersion());

我在这里疯了......发生了什么事?

1 个答案:

答案 0 :(得分:0)

问题与我在没有正确使用serialVersionUID的情况下对持久性实体结构/架构所做的修改有关。有关详细信息,请参阅问题的评论,特别是Viruzzo的评论。