我有一个约会表,其中约会日期为一列。我想使用 JPA 检索 appengine 数据存储中两个日期之间的所有约会。请让我知道如何实现这一目标?我尝试了以下查询,但没有奏效。
从约会中选择一个,其中 (apptSts='p' 或 apptSts='a') 和 (apptDate>=:fromDate 或 apptDate<=:toDate)
我有一个约会表,其中约会日期为一列。我想使用 JPA 检索 appengine 数据存储中两个日期之间的所有约会。请让我知道如何实现这一目标?我尝试了以下查询,但没有奏效。
从约会中选择一个,其中 (apptSts='p' 或 apptSts='a') 和 (apptDate>=:fromDate 或 apptDate<=:toDate)
将该属性设为列表属性。然后您可以在两个日期之间进行查询。请参阅在 Objectify 中完成的以下测试代码。我认为您也可以在 JPA 中使用相同的技术。 https://github.com/stickfigure/objectify/blob/master/src/test/java/com/googlecode/objectify/test/QueryExoticTypesTests.java
要检索两个日期之间的约会,您需要将查询逻辑更改为包括 "和" 而不是 "或" :
select a from Appointment
where apptDate>=fromDate and apptDate<=toDate
您可以在 appengine 中的同一属性上使用不等式文件管理器,但它们不能与 OR 结合使用。
请参阅gql 参考中的示例,这也应该适用于 JPA。
您可以应用多个不等式,但它们应该在同一个字段(变量)上。我猜这里出了什么问题是应用程序引擎不允许使用括号的东西,,,我的意思是
(conditionA AND conditionB .....) OR (conditionC AND conditionC .....)
//--this is not allowed.
顺便说一句,以下是允许的(我试过了)
(conditionA AND conditionB .....) AND (conditionC AND conditionC)
//--allowed(although its bracket are meaning less here)
您只能执行大于或小于查询,因此一种方法是执行大于查询,并遍历结果并手动过滤掉与小于查询不匹配的结果。