2014-12-31 42 views
8

ho un'entità chiamata Band con un attributo List<Genres> genres, Generi è un ENUM con i seguenti valori: ALTERNATIVE_ROCK("Alternative Rock"), CLASSIC_ROCK("Classic Rock"), HARD_ROCK("Hard Rock"), HEAVY_METAL("Heavy Metal"),PROGRESSIVE_ROCK("Progressive Rock");utilizzando l'elenco enum come parametro nella query HQL

Sto cercando di creare un metodo che restituisce un List<Band> utilizzando un List<Genres> come parametro utilizzando HQL, qualcosa come:

public List<Band> listBandsPerGenres(List<Genres> genres); 

ma sto ricevendo alcuni errori con query HQL che avevo provato?

Sopra alcune query HQL che ho provato ...

Query q = getSession().createQuery("SELECT b FROM Band b JOIN FETCH b.genres g WHERE g IN (?)"); 
     q.setParameter(0, genres); 
     return q.list(); 

restituisce un errore che dice che un ArrayList non può essere lanciato a Enum ...

o ...

"SELECT b FROM Band b JOIN FETCH b.genres g WHERE g.value IN (?)" 

restituisce un errore del tipo: dereference scalare elemento di raccolta ENUM

generi di proprietà mappin g, entità Banda ...

@Basic(optional=false) 
    @Enumerated(EnumType.STRING) 
    @ElementCollection(targetClass=Genres.class) 
    @CollectionTable(name="banda_generos", [email protected](name="id_banda", nullable=false)) 
    private List<Genres> genres; 
+2

quali erano le query che hai provato e quali erano gli errori corrispondenti? –

+0

Si prega di aggiungere le annotazioni dell ''Elenco ', è importante vedere se è 'EnumType.String' o il valore predefinito. –

+0

sto usando questo ENUM come ENUMTYPE.STRING –

risposta

6

Questo funziona per Hibernate 4

Query q = s 
      .createQuery("SELECT b FROM Q27715453$Band b JOIN b.genres g WHERE g IN (:genres)"); 
    q.setParameterList("genres", Arrays.asList(Genres.ROCK, Genres.CLASSIC)); 
    System.out.println(Arrays.toString(q.list().toArray())); 

Verificare che il metodo Query#setParameterList viene usato al posto di Query#setParameter, anche è usato g invece di g.value.

+0

grazie! !! ha funzionato perfettamente !!! Felice anno nuovo e continua a dondolare con Java uahauhauhauhauah !! –

1

Non penso che tu possa farlo. Secondo gli elenchi JPA spec (section 4.6.9. page 185) non sono supportati come operando lato sinistro con espressione IN.

+0

come @AVolpe ha detto nella risposta qui sotto ... funziona con Hibernate 4 con il metodo setParameterList –