2016-08-03 41 views
0

迭代,我有三個實體:檢查對象是一個多對多集合,而不取,並通過了所有的集合

User (id, name, organizations[], ...) 

Organization (id, name, plants[], ...) 

Plant (id, name ...) 

User.organizations和Organization.plants是多對多FetchType.LAZY協會

現在,我有一個「工廠」和一個「用戶」對象。我想知道工廠對象是否在與用戶關聯的一個(或多個)組織的工廠集合中。

是否有可能使用JPA API或至少Hibernate來做到這一點,而無需獲取所有集合,也沒有自定義查詢?

例如,如果用戶擁有2000個組織並且每個組織都可以包含1000個工廠,那麼它可能是一個真正的性能殺手來遍歷集合。

+0

爲什麼您甚至會想到加載到內存中並對可以對包含指定工廠的某些組織的所有用戶執行JPQL查詢時進行迭代? –

+0

我想我會去JPQL /本機SQL的方式,但我想知道如果有另一種方式來做到這一點 –

回答

1

要獲得有具有特定的植物組織的所有用戶對象,你可以做JPQL這樣

SELECT u FROM User u JOIN u.organizations o JOIN o.plants p WHERE p.id = :myPlantId 

,然後通過用戶對一個你想要的樣子。或者再次,您可以限制特定用戶

SELECT u FROM User u JOIN u.organizations o JOIN o.plants p WHERE u.id = :myUserId AND p.id :myPlantId 
+0

我會這樣做。感謝您提供快速而優質的答案 –