我正在做一个概念验证,以创建一个服务来访问具有 OData 服务的现有 Oracle 数据库。这个想法是使用 Olingo 和 JPA,在模型中显式地使用 JPA 注释。我们目前不知道使用哪个提供商。到目前为止,我们已经对 EclipseLink 和 Hibernate 进行了试验,并且遇到了类似的问题。
数据库模式使用 NUMBER(28,0) 作为所有表的键。据我了解,模型中相应的 JPA 声明是:
@Id
@Column(name = "id", scale = 28, precision = 0)
private BigDecimal id;
对此的 OData 查询如下所示:
http://localhost:8081/myservice.svc/PO(10000000000000000000000080M)
请注意,我们实际上有具有此范围内键的数据。对于键是较小数字的表,我们一切正常。
我已经调试了这个处理,发现 Olingo 产生了一个 JPQL 表示,从我对规范的阅读来看是正确的。
SELECT E1 FROM PO E1 WHERE E1.id = 10000000000000000000000080
此时,它会进入提供程序特定的代码,以尝试将其转换为适当的 SQL 查询。Hibernate 和 EclipseLink 都无法识别该文字。似乎在转换期间转换成它们的内部格式应该导致该数字具有限定符以指示它是一个大整数。
两个系统的故障实际上是不同的。EclipseLink 创建一个具有“其中 id 为空”的选择。Hibernate 抛出异常。
我的问题是:
- 是否有其他方法可以让我定义我的模型,以便它进入正确的处理并成功?
- 我应该向各自的提供商报告这些错误吗?
- 如果这些是错误,任何人都可以推荐一个不会失败的替代提供商吗?
谢谢!