编程语言
首页 > 编程语言> > java-使用App Engine数据存储区查找重叠范围

java-使用App Engine数据存储区查找重叠范围

作者:互联网

我正在使用具有JDO接口的Java Java App Engine,用于CrimeWatch组织的应用程序的数据存储.我要实现的功能之一是外出日志,人们可以报告他们要离开很长一段时间(因此巡逻队知道要留意房屋).在应用程序中,我有一个AwayLogEntry对象,带有开始和结束日期,以及其他需要的字段.

我需要向在给定时间段(通常是下个星期)中巡逻离家附近的人提供报告.我正在尝试构建一个报告,该报告给出两个日期来查找与此范围重叠的所有AwayLogEntries.

我真正想使用的查询是

从AwayLogEntry中选择*,其中不是(结束<:reportStartDate ||开始>:reportEndDate)

但是,NOT子句是不允许的(找不到有关此内容的文档,但是它抛出了这种情况的异常),也没有使用两个带有inequality filters的字段,因此我不能直接查询不同的重叠情况.

我目前的解决方法不是很好-我将做一个日常cron作业,以在当前日期大于条目结束日期时删除(或标记它们(如果需要保留它们以进行审核))日志条目.然后,我可以查询开始日期小于报告结束日期的所有条目(如果不删除它们,则不会标记).这将允许合理地报告接下来X天的条目(这是他们通常需要的),但不允许进行任意日期范围查询(我猜他们会要求),除非我只是拉入所有条目并用代码过滤它们.

谁能想到任何技巧来解决GAE JDO实现的这一局限性?

解决方法:

除了AwayLogEntry的开始和结束之外,您还可以具有一个list属性,其中包含该人离开的所有日子的列表.

然后,您的查询过滤器可以检查日期> :reportStartDate和日期< :reportEndDate,它将两个不等式过滤器组合在一个date属性列表上,该列表受支持.

标签:google-app-engine,google-cloud-datastore,java
来源: https://codeday.me/bug/20191209/2096317.html