假設我有實體A,B,C,並且每個A都有許多B和C實體。我想查詢基於一些criterea的A實體的負載,並且我知道我將訪問每個A返回的所有B和C實體。如何有效地查詢三個相關表(JPA-QL)
像select a from A as a join fetch a.b join fetch a.c
這樣的東西一開始似乎是有意義的,但是如果B和C實體的數量很大,這會產生一個巨大的產品。將此擴展到另一個關聯實體會使查詢完全不合理。
如果我將JPA留給自己的設備,那麼當它想要訪問B和C實體時,我最終會得到n + 1個選擇。
我以爲我會做的是查詢一個連接抓取B,然後一個連接抓取C,但這不起作用,因爲它給我兩個List<A>
每個結果只有一半的信息。
這是一個非常簡單的SQL查詢語句,我很失望,沒有一個明顯的方法來處理這個問題。我錯過了什麼嗎?
提供商是toplink必需品
「我想知道你爲什麼說這在SQL中很簡單,你是不是也有笛卡爾產品?」 如果我用一個查詢做了它,當然。我的意思是我可以輕鬆地做兩個查詢並將兩者的結果一起使用。 我知道冬眠可以做到這一點,但我使用的是toplink。 – Draemon 2009-10-12 13:42:29
@Draemon好的,謝謝澄清SQL部分。 – KLE 2009-10-12 13:57:54
感謝您的更新 - 這與我現在正在嘗試的類似。我是否正確地假設我必須首先分離所有實體,否則第4步會將所有As標記爲髒,並在提交時導致混亂? – Draemon 2009-10-12 14:22:24