DateTimeOffset上的ODATA过滤

时间:2013-11-04 15:46:43

标签: datetimeoffset odata4j

我正在尝试过滤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)&#xd  ;
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)所以相等总是导致题:

...entities?$filter=myDate eq datetimeoffset'2013-09-30T00:00:00.000Z'

有什么想法吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

此问题的解决方法是使用以下两个过滤器:

...实体?$ filter = myDate ge datetimeoffset'2013-09-30T00:00:00.000Z'和myDate lt datetimeoffset'2013-10-30T00:00:00.000Z'

我仍然不明白为什么年/月/日功能不起作用。