2014-06-19 8 views
7

Sto usando l'annotazione @NamedEntityGraph per caricare un grafico dal database.Grafico dell'entità denominata JOINS risultati (occorrono opzioni distinte)

@NamedEntityGraph(
    name = "Firma.uredjivanje", 
    attributeNodes = { 
      @NamedAttributeNode(value="prevodi", subgraph = "prevodi") 
    }, 
    subgraphs = { 
      @NamedSubgraph(
        name = "prevodi", 
        attributeNodes = { 
          @NamedAttributeNode(value = "jezik", subgraph = "jezik") 
        } 
      ) 
    } 
) 

Nel repository primavera dati JPA, sto usando annotazione:

@EntityGraph(value="Firma.uredjivanje", type = EntityGraph.EntityGraphType.LOAD) 
List<Firma> getByAktivna(boolean aktivna); 

tutto funziona come previsto, si aspettano che tutte le relazioni sono uniti, e ottengo entità Firma duplicati (a causa di JOIN) . Invece di un elenco con ID entità {1,2,3}, ottengo {1,1,1,2,2,3}.

Qual è il modo migliore per ottenere entità distinte (se questo non è un bug ofcourse).

risposta

8

Trovato la risposta ... Poiché NamedEntityGraph fa parte nel database, seleziona tutte le entità senza DISTINCT. Quindi la soluzione è quella di utilizzare Distinti in nome del metodo ...

@EntityGraph(value="Firma.uredjivanje", type = EntityGraph.EntityGraphType.LOAD) 
List<Firma> getDistinctByAktivna(boolean aktivna); 
+0

Egregio Signore, si salva d il mio giorno! Grazie mille per aver suggerito la KeyWord "Distinta" per le query sui metodi! – muri

0

Dopo aver aggiunto dictinct Ho log degli errori durante starup del server (forse perché non v'è alcuna cosa come findDistinctAll().

Per me aiuto un suggerimento in https://jira.spring.io/browse/DATAJPA-680.

ho aggiunto @Query annotazione al metodo, quindi il mio metodo si presenta come di seguito

@EntityGraph(value = "User.detail", type = EntityGraph.EntityGraphType.LOAD) 
@Query(value = "SELECT DISTINCT u FROM User u") 
List<User> findAll();