2016-01-13 137 views
1

我使用弹簧引导和弹簧数据JPA。它工作正常,但! 我需要使用来自Oracle数据库的复杂本机查询(来自SAP ERP的源数据)。弹簧数据JPA,复杂本机查询

可以说包含5个分区表(一个键或复合键)的查询。 我可以使用很多参数。

解决方案:

1)它是虚幻的使用JPA此查询新查询写入由于耗时。创建表之间的所有关键关系似乎很复杂。

2)要运行这些查询,我使用JDBC。这很容易,因为我已经准备好原生查询。但我确信这种做法是不正确的。

你知道如何使用Spring数据JPA来运行非常复杂的本机查询吗?

感谢您的建议

回答

0

我的第一印象是您可能想要重新访问数据模型。在数据库资源上加入5个表格可能相当昂贵,并且您的数据模型可能更易于使用de-normalized

如果数据模型被埋没在石头中,并且您不想使用JPQL进行复杂查询并且不想使用普通JDBC,我相信您有两种选择。

  1. 使用JPA criteria queries。它们与Hibernate Criteria API略有相似,实际上它们是用来取代它们的。我只使用基于JEE6的JPA Criteria查询,有时候他们感觉有点笨重。不知道在JEE7中它是否更好。

  2. 您可以考虑使用低级查询构建器,如JOOQQueryDSL。我相信JOOQ是为Oracle付出的。 QueryDSL对JPA也有一些支持,但不确定它有什么目标。也许可以让JPA标准查询稍微更有用的API。

的选项都允许使用,构建类型安全的查询与Java API的链接,让你在Java代码中的查询不应该比普通的SQL太多的代码。