我使用spring boot和spring数据JPA。它工作正常但是! 我需要使用来自Oracle数据库的复杂本机查询(来自SAP ERP的源数据)。
让我们说查询包含5个joned表(一个键或复合键)。 我可以使用很多参数。
解决方案:
1)由于耗时,使用JPA为此查询编写新查询是不真实的。创建表之间的所有关键关系似乎很复杂。
2)要运行这些查询,我使用JDBC。这很容易,因为我准备了原生查询。但我确信这种方法不对。
您是否知道如何使用Spring数据JPA来运行非常复杂的本机查询?
感谢您的建议
答案 0 :(得分:0)
我的第一印象是您可能想要重新访问数据模型。在数据库资源上加入5个表可能非常昂贵,而您的数据模型可能更有用de-normalized。
如果数据模型被埋没在石头中并且您不想将JPQL用于复杂查询并且不想使用普通JDBC,我相信您有两种选择。
使用JPA criteria queries。它们与Hibernate Criteria API略有相似,实际上它们意味着要取代它们。我只使用基于JEE6的JPA Criteria查询,有时他们觉得有点笨拙。不确定它是否在JEE7中变得更好。
您可以考虑使用较低级别的查询构建器,例如JOOQ或QueryDSL。我相信JOOQ是为Oracle支付的。 QueryDSL也对JPA有一些支持,但不确定目标是什么。也许让JPA标准查询稍微更有用的API。
这两个选项都允许使用Java链式API构造类型安全查询,因此您在Java代码中的查询不应该是比纯SQL更多的代码。