2016-01-13 81 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太多的代碼。