2017-08-23 2 views
4

Ich habe mehrere Entitäten konfiguriert und zugeordnet und alles funktioniert wie erwartet.Verknüpfen Sie mehrere Entitäten mit where-Klausel und erhalten Ergebnis von diesem

Jetzt möchte ich eine benutzerdefinierte Abfrage verwenden, wo ich mehrere Entitäten verbinden und einige Where-Klauseln für diese definieren.

public interface GiataItemRepository extends JpaRepository<GiataItem, String>{  
    @Query(value="select g from GiataItem g " 
      + "join g.service s " 
      + "join s.section se " 
      + "join se.secPic sp " 
      + "where g.giataId = :giataId " 
      + "and se.secScope = 'MAINGALLERY' " 
      + "and sp.category = 'MAINGALLERY' " 
      + "and sp.seqOrder = 0") 
    GiataItem findPicture(@Param("giataId") String giataId); 
} 

Die SQL gibt mir das korrekte Ergebnis für meine GiataItem. Aber ich habe nicht die Beschränkungen von meinen where-Klauseln für alle anderen abgebildeten Entitäten wie service, section und so weiter.

Ich verwende Lazy Loading und es ist klar, wenn ich giataIetem.getService, JPA verwendet eine neue Auswahl und meine Where-Klauseln sind weg.

Also wie kann ich erreichen, dass ich alle meine verbundenen Entitäten auf die Where-Klauseln und seine Einschränkungen bauen.

Antwort

2

Sie können das erreichen, indem JOIN FETCH mit:

@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") 

Auch bei dieser Antwort von Vlad Mihalcea einen Blick:

How does the FetchMode work in Spring Data JPA

Verwandte Themen