在JPA項目中,我需要顯示其數據來自5個相關實體的表。 沒有JPA,我可以編寫一個sql查詢,它將5個數據庫表連接在一起,並根據某些條件進行過濾。 假設過濾標準中涉及的字段只是第一個實體的字段。 使用JPA我可以加載第一個實體的過濾實例,並瀏覽屬性直到最終實體。 我擔心的是,如果我無法使用或者對fecttype = eager註釋犯了錯誤,那麼對數據庫的查詢數量可能會爆炸。 在這種情況下,哪種方法最好? 我想嚴格控制將要執行的sql查詢,所以我可以優化它們,但是如果我用手寫聯接來編寫sql查詢,我是否必須使用'old'結果集來檢索數據?有效地顯示來自多個連接的結果
1
A
回答
0
您可以使用JPA的內置查詢語言JPQL嗎? (它確實有一個JOIN操作符。)但請注意,這不是標準的SQL,只是類似的東西,所以請仔細閱讀JPQL文檔。是的,這仍然是嵌入在Java代碼中的純文本查詢,這是一種恥辱,但是,嘿,這就是Java可以支持開發過程的程度。
這裏的主要優勢在於,您可以獲得實體對象作爲查詢的結果 - 儘管您仍然需要從Object轉換它們。您還可以直接在查詢字符串中使用對象(記錄)及其成員變量(屬性),所以這是從舊的JDBC開始的一步。
或者你也可以選擇Criteria API,但坦白地說,我的經驗並不是很好。語法非常糟糕,你基本上最終會自己構建低級查詢。這顯然是Java最糟糕的......但至少包含查詢的字符串可以從代碼中消除。我不確定這是否值得。
檢查此頁面瞭解更多信息和示例:
+0
我同意標準API,這是新手真正的噩夢。我的想法如下:創建一個只有很少幾行的'怪胎'視圖只是爲了創建一個實體(讓我們稱之爲summarydata)。使用連接創建一個JPQL查詢並添加動態過濾條件。將其轉換爲summarydata並顯示在jsf h:datatable中。它應該工作,不是嗎? – Filippo
相關問題
- 1. 更有效地顯示搜索結果?
- 2. 顯示來自一個表的結果
- 3. 連接來自索引匹配的多個結果
- 4. 連接來自多個不相關1行結果集的列
- 5. 如何分組和連接來自多個記錄的結果?
- 6. 使用XML PATH連接來自多個WHERE子句的結果
- 7. 如何有效處理來自Executor服務的多個結果
- 8. SQLAlchemy:如果連接返回多個結果,則只顯示最新結果
- 9. 顯示來自多個表格的結果
- 10. 顯示來自sql查詢的多個結果
- 11. 顯示來自嵌套查詢的多個結果?
- 12. 顯示來自多個異步Web請求的結果下載
- 13. 顯示來自多個表的結果SQL/PHP
- 14. 顯示來自3個mysql表的所有可能結果
- 15. print_r顯示來自POST的空結果
- 16. 顯示來自INNER JOIN的結果
- 17. 顯示來自SQL Select Statment的結果
- 18. EmberJS不顯示來自DS.RestAdapter的結果
- 19. 顯示來自API的搜索結果
- 20. 顯示來自mysqli_query的結果
- 21. 顯示來自數據庫的結果
- 22. preg_match_all顯示多個結果
- 23. Haskell顯示多個結果
- 24. Excel - 顯示包含多個結果的所有結果vlookup
- 25. Mysql連接未顯示結果
- 26. 在Google地圖上顯示來自搜索查詢的結果
- 27. SQL連接來自多個數據庫連接的多個表
- 28. SQL連接兩個表來給出多個數組的結果
- 29. MySQL的自然連接顯示類似於LEFT OUTER結果JOIN
- 30. Playframework - 查詢和顯示多表連接的結果
你能在你的數據庫中創建視圖的? –
是的,我可以。不幸的是,過濾標準是動態的,所以我不能把它們放在視圖內,或者簡單地說我不能如何去做。我關心的是過濾過程:如果我首先創建視圖並過濾它,那麼我必須加入一張非常大的表格,而不僅僅是我感興趣的行。請閱讀以下答案的評論。 – Filippo
好吧,一起使用靜態視圖和動態查詢可能有風險。你能提供更多關於框架或數據庫的信息嗎? –