2010-10-05 45 views
3

我正在使用適用於CrimeWatch組織的應用程序的數據存儲的JDO接口的Java App Engine for Java。我試圖實現的功能之一是一個離開日誌,人們報告他們將要離開很長一段時間(所以巡邏人員知道要留意房屋)。在應用程序中,我有一個AwayLogEntry對象,其中包含開始和結束日期,以及其他字段。使用App Engine數據存儲區查找重疊範圍

我需要向在特定時間段(通常是即將到來的一週)內巡邏誰在附近的人提供報告。我試圖建立一個報告,給定兩個日期查找所有與此範圍重疊的AwayLogEntries。

查詢我真的想用是

select * from AwayLogEntry where not(end < :reportStartDate || start > :reportEndDate)

但是NOT子句是不允許的(無法找到這個文件,但它拋出一個異常,以這種效果),也不能使用與inequality filters兩個字段,所以我不能直接查詢不同的重疊情況。

我現在的解決方法並不是很好 - 我打算做一個日常的cron作業,噹噹前日期大於條目時刪除(或者標記它們,如果我需要保留它們用於審覈)結束日期。然後我可以查詢開始日期小於報告結束日期的所有條目(如果我不刪除它們,則不標記)。這將允許合理地報告接下來X天的條目(這是他們通常需要的),但不允許任意日期範圍查詢(我猜他們會要求),除非我只是將所有條目拉入並用代碼進行過濾。

任何人都可以想到任何技巧來解決這個GAE JDO實現的限制嗎?

+2

哇。如果我是盜賊,我會加入當地的犯罪觀察組織。他們不僅給我一個喧譁的地方清單,而且當沒有人會觀看時! – 2010-10-05 07:52:02

+0

:)報告只提供給巡視員,而不是普通會員 - 但是,你必須相信你的巡視員。 – Andrew 2010-10-05 15:30:16

回答

3

除了AwayLogEntry的開始和結束,您還可以擁有包含該人離開的所有日子列表的列表屬性。

然後,您的查詢過濾器可以檢查dates > :reportStartDate and dates < :reportEndDate,它在單個支持的日期屬性列表上組合了兩個不等式過濾器。

+0

我會推薦這個,每週只有一個條目,因爲這是報告的粒度。 – 2010-10-05 07:51:32

+0

完美 - GAE新手,因此以前沒有使用過列表屬性。謝謝! – Andrew 2010-10-05 15:31:50