日期时间的Java/Hibernate odata过滤器不起作用

2020-09-14 15:20发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们!

在我的组织中,我们开发了一个Java应用程序来公开odata服务,我们使用的一些技术是:

  • Spring Boot
  • Apache Olingo
  • JPA/休眠状态

一切似乎都可以正常工作,我们可以使用odatas并满足我们的要求,但是在按日期执行过滤时发现了一个问题。

查询:

WorkOrderHeaders?$ filter =(StartDate ge datetime'2018-01-16T05:00:00')

结果:

QueryException:意外字符:'{'[从WorkOrderHeader E1 WHERE中选择E1(E1.startDate> = {ts'2018-01-16 05:00:00.000'})]

我认为这是Olingo的问题,所以我进行了研究并找到了这篇文章: https://issues.apache.org/jira/browse/OLINGO-240?jql=text%20~%20%22datetime% 20filter%22

它基本上说:"此问题特定于休眠,目前在Olingo JPA处理器中没有针对休眠的特定处理。"

谷歌搜索休眠状态,我发现了这一点: https://hibernate。 atlassian.net/browse/HHH-8653

它提到:"问题的根源似乎是Hibernate生成的语法不包括对时态文字的支持"

因此,显然休眠状态不提供对日期文字的支持。

  • 有什么想法如何解决这个问题?
  • 我是否需要更改JPA实施?

ps。 我已经使用相同的技术构建了一个小项目,但是考虑使用eclipselink而不是hibernate,并且可以与日期过滤器一起很好地工作。

(12.2 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们!

在我的组织中,我们开发了一个Java应用程序来公开odata服务,我们使用的一些技术是:

  • Spring Boot
  • Apache Olingo
  • JPA/休眠状态

一切似乎都可以正常工作,我们可以使用odatas并满足我们的要求,但是在按日期执行过滤时发现了一个问题。

查询:

WorkOrderHeaders?$ filter =(StartDate ge datetime'2018-01-16T05:00:00')

结果:

QueryException:意外字符:'{'[从WorkOrderHeader E1 WHERE中选择E1(E1.startDate> = {ts'2018-01-16 05:00:00.000'})]

我认为这是Olingo的问题,所以我进行了研究并找到了这篇文章: https://issues.apache.org/jira/browse/OLINGO-240?jql=text%20~%20%22datetime% 20filter%22

它基本上说:"此问题特定于休眠,目前在Olingo JPA处理器中没有针对休眠的特定处理。"

谷歌搜索休眠状态,我发现了这一点: https://hibernate。 atlassian.net/browse/HHH-8653

它提到:"问题的根源似乎是Hibernate生成的语法不包括对时态文字的支持"

因此,显然休眠状态不提供对日期文字的支持。

  • 有什么想法如何解决这个问题?
  • 我是否需要更改JPA实施?

ps。 我已经使用相同的技术构建了一个小项目,但是考虑使用eclipselink而不是hibernate,并且可以与日期过滤器一起很好地工作。

(12.2 kB)
付费偷看设置
发送
4条回答
樱桃小丸子0093
1楼-- · 2020-09-14 15:40

伊万(Hi Ivan)

考虑到已使其与EclipseLink一起使用,是否有任何理由应使用hibernate代替?

BTW:SAP已提供了库" SDK for Services ",它与新的云铸造厂" 应用程序编程模型"。 使用这两种技术,您都可以基于数据库实体创建自己的OData服务,并且可以自动化并简化开发过程,而无需牺牲灵活性。 我建议也研究一下。 有一个很好的博客,介绍如何使用此技术创建示例。

希望有帮助。

关于,
伊万

微wx笑
2楼-- · 2020-09-14 15:55

伊万。

感谢您的回答,由于从Hibernate迁移到EclipseLink,目前我正在测试应用程序以寻找负面影响。

由于我们的团队在休眠方面有更多的经验,有没有办法解决此问题?

clasier
3楼-- · 2020-09-14 15:52

嗨,伊凡,

请检查以下有关如何在Eclipse中为HANA设置Hibernate的教程。 我认为这可能会帮助您检查项目设置。

更具体地说,请在休眠持久性配置上检查以下属性:

 hibernate.dialect = org.hibernate.dialect.HANAColumnStoreDialect 

"意外的字符"告诉我,休眠状态正在为您的HANA数据库生成无效的SQL命令(我假设您正在尝试针对HABA DB运行JPA项目。对吗?)。

从提供的错误中检查SQL命令时,我注意到函数'ts'的用法。 这表明hibernate不会生成与HANA兼容的SQL代码,因为没有这样的数据类型转换功能 TO_TIMESTAMP。

我认为通过设置正确的方言,生成的SQL语法将是正确的。

我还将尝试通过SQL Console对您的数据库运行在Hibernate应用程序上看到的相同SQL命令。 这样,您将能够找出SQL命令的哪一部分是错误的。

最好的问候,
伊万

clasier
4楼-- · 2020-09-14 15:51

嗨伊万,

好的,现在我了解了您要执行的操作以及Hibernate的限制。 但是,版本4.2.5中缺少对日期文字的支持。

您能否检查您使用的Spring Boot版本带有较新版本的hibernate-core?

即使是对于春季靴1.5.16,您也将进入休眠状态5.0.12-它可能已经解决了您遇到的此问题。 由于您要检查修复程序,因此我将直接使用包含休眠核心5.3.5的2.1.0版本。

关于,
伊凡

一周热门 更多>