2017-08-23 2 views
4

J'ai plusieurs entités configurées et mappées avec succès et tout fonctionne comme prévu.Rejoindre plusieurs entités en utilisant la clause where et obtenir le résultat de cela

Maintenant, je veux utiliser une requête personnalisée où je rejoins plusieurs entités et définir des clauses where sur celles-ci. Le code SQL me donne le résultat correct pour mon GiataItem. Mais je n'ai pas les restrictions de mes clauses where pour toutes les autres entités mappées comme service, section et ainsi de suite.

J'utilise le chargement paresseux et c'est clair quand j'utilise giataIetem.getService, JPA fait une nouvelle sélection et mes clauses where ont disparu.

Alors comment puis-je obtenir que toutes mes entités jointes construisent sur les clauses where et ses restrictions.

Répondre

2

Vous pouvez y parvenir en utilisant JOIN FETCH:

@Query(value="SELECT g FROM GiataItem g " 
     + "JOIN FETCH g.service as s " 
     + "JOIN FETCH s.section as se " 
     + "JOIN FETCH se.secPic as sp " 
     + "WHERE g.giataId = :giataId " 
     + "AND se.secScope = 'MAINGALLERY' " 
     + "AND sp.category = 'MAINGALLERY' " 
     + "AND sp.seqOrder = 0") 

Aussi, jetez un oeil à cette réponse de Vlad Mihalcea:

How does the FetchMode work in Spring Data JPA