我正在尝试过滤 DateTimeOffset(以下示例中的 myDate)。由于我想忽略时间部分,我相信过滤的唯一方法是分别比较年、月和日组件,例如
...entities?$filter=year(myDate) eq 2013
这也符合 ODATA 规范: http ://www.odata.org/documentation/odata-v3-documentation/url-conventions/#512412_year
问题是......它只是不起作用:
Caused by: java.lang.UnsupportedOperationException: unsupported expression YearMethodCallExpression
at org.odata4j.producer.jpa.JPQLGenerator.toJpql(JPQLGenerator.java:187)
at org.odata4j.producer.jpa.JPQLGenerator.binaryCommonExpressionToJpql(JPQLGenerator.java:309)
at org.odata4j.producer.jpa.JPQLGenerator.toJpql(JPQLGenerator.java:192)
at org.odata4j.producer.jpa.GenerateJPQLCommand.generateJPQL(GenerateJPQLCommand.java:121)
 ;
at org.odata4j.producer.jpa.GenerateJPQLCommand.execute(GenerateJPQLCommand.java:34)
at org.odata4j.producer.jpa.Chain.execute(Chain.java:29)
at org.odata4j.producer.jpa.JPAProducer.getEntities(JPAProducer.java:278)
如果我使用下面的过滤器,那么我不会收到任何错误,但这不是我想要做的,因为 myDate 中的时间部分永远不会是午夜 (T00:00:00.000Z),所以相等总是导致 False:
...entities?$filter=myDate eq datetimeoffset'2013-09-30T00:00:00.000Z'
任何想法?非常感谢!