2016-08-03 7 views
0

Ich habe drei Einheiten:Überprüfen Sie, ob ein Objekt in einer ManyToMany Sammlung ist ohne holen und durchlaufen die ganze Sammlung

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

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

Plant (id, name ...) 

User.organizations und Organization.plants sind ManyToMany FetchType.LAZY Verbände

Jetzt, Ich habe ein "Pflanzen" und ein "Benutzer" -Objekt. Ich würde gerne wissen, ob sich das Pflanzenobjekt in der Pflanzensammlung einer (oder mehrerer) der dem Benutzer zugeordneten Organisationen befindet.

Ist es möglich, die JPA-API oder zumindest Hibernate zu verwenden, ohne alle Sammlungen abzurufen und ohne benutzerdefinierte Abfrage?

Wenn zum Beispiel ein Benutzer 2000 Organisationen hat und jede Dose 1000 Pflanzen enthält, könnte es ein echter Performance-Killer sein, durch Sammlungen zu iterieren.

+0

Warum würden Sie sogar von Laden in den Speicher denken und iteriert, wenn Sie eine JPQL Abfrage für alle Nutzer tun können, die einige Organisationen haben, die die angegebene Pflanze enthält? –

+0

Ich denke, ich werde die JPQL/native SQL-Art gehen, aber ich fragte mich, ob es eine andere Möglichkeit gab, das zu tun –

Antwort

1

Um alle Benutzer-Objekte erhalten, die Organisationen, die die jeweilige Anlage haben, können Sie JPQL wie diese

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

und dann rufen Sie die Benutzer für die man tun kann, Sie wollen. Wiederum alternativ können Sie durch den spezifischen Benutzer beschränken

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

Ich werde das tun. Danke für die schnelle und gute Antwort –

Verwandte Themen