2014-12-31 73 views
8

Ben bir varlık bir öznitelik List<Genres> genres ile Band çağrıda, Türler aşağıdaki değerlerle bir ENUM olan parametre olarak List<Genres> HQL gibi bir şey kullanarak:kullanarak enum liste

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

Ama ben çalışmıştı HQL sorgu ile bazı hatalar alıyorum? i çalıştığım bazı hql sorguları Üstü

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

bir ArrayList Enum döküm edilemeyeceğini belirten bir hata döndürür ...

ya ...

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

gibi bir hata döndürür: dereference scalar collection element ENUM

property türleri mappin g, entity ...

@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

Denediğiniz sorgular nelerdi ve bunlara karşılık gelen hatalar nelerdi? –

+0

Lütfen " Listesinin" ek açıklamalarını ekleyiniz, enumType.String veya varsayılan olup olmadığını anlamak önemlidir. –

+0

ENUMTYPE.STRING –

cevap

6

Bu yöntem Query#setParameterList ayrıca gg.value Insted kullanılır, yerine Query#setParameter ait kullanıldığını hazırda 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())); 

kontrol için çalışır.

+0

'u kullanarak hazırda bekletme 4 ile çalışır! !! Mükemmel çalıştı! Yeni yılın kutlu olsun ve Java uahauhauhauhauah ile sallanmaya devam edin! –

1

Bunu yapabileceğinizi düşünmüyorum. JPA spec (section 4.6.9. page 185) listelerine göre IN ifadesiyle sol taraftaki işlenenler desteklenmez.

+0

gibi @AVolpe aşağıdaki cevabında şunu belirtin: setParameterList yöntemi –