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

我正在使用Google App Engine for Java和JDO接口来为CrimeWatch组织的应用程序提供数据存储。 我试图实现的function之一是远程日志,当人们长时间离开时会报告(因此巡逻者知道要密切关注房屋)。 在应用程序中,我有一个AwayLogEntry对象,其中包含开始日期和结束日期,以及所需的其他字段。

我需要向在特定时间段(通常是即将到来的一周)内离开的邻居巡逻的人提供报告。 我正在尝试构建一个报告,给出两个日期,找到与此范围重叠的所有AwayLogEntries。

我真正想要使用的查询是

select * from AwayLogEntry where not(end :reportEndDate)

但是不允许使用NOT子句(找不到关于这个的文档,但是它引起了这种效果的exception),也没有使用带有不等式filter的两个字段,所以我不能直接查询不同的重叠情况。

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

任何人都可以想到解决GAE JDO实施的这种限制的任何技巧吗?

除了AwayLogEntry的开始和结束AwayLogEntry ,您还可以拥有一个列表属性,其中包含此人离开的所有日期的列表。

然后,您的查询filter可以检查dates > :reportStartDate and dates < :reportEndDate ,它在一个date属性列表中组合了两个不等式filter,这是受支持的。