2014-12-31 13 views
8

Tôi đã một thực thể gọi là Band với một thuộc tính List<Genres> genres, thể loại là một ENUM với các giá trị sau: ALTERNATIVE_ROCK("Alternative Rock"), CLASSIC_ROCK("Classic Rock"), HARD_ROCK("Hard Rock"), HEAVY_METAL("Heavy Metal"),PROGRESSIVE_ROCK("Progressive Rock");sử dụng danh sách enum như tham số trong truy vấn HQL

Tôi đang cố gắng để tạo ra một phương thức trả về một List<Band> sử dụng một List<Genres> làm tham số sử dụng HQL, giống như sau:

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

Nhưng tôi đang gặp một số lỗi với truy vấn HQL mà tôi đã thử?

Trên một số truy vấn HQL mà tôi đã cố gắng ...

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

trả về một lỗi nói rằng một ArrayList không thể được đúc để Enum ...

hoặc ...

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

trả về lỗi như: yếu tố thu thập vô hướng dereference ENUM

đặc tính thuộc tính mappin g, tổ chức ban nhạc ...

@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

các truy vấn bạn đã thử là gì và các lỗi tương ứng là gì? –

+0

Vui lòng thêm chú thích của 'Danh sách ', điều quan trọng là phải xem đó là 'EnumType.String' hay mặc định. –

+0

Tôi đang sử dụng ENUM này như ENUMTYPE.STRING –

Trả lời

6

này làm việc cho 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())); 

Kiểm tra rằng phương pháp Query#setParameterList được sử dụng thay vì Query#setParameter, cũng nó được sử dụng g insted của g.value.

+0

cảm ơn! !! nó hoạt động hoàn hảo !!! Chúc mừng năm mới và tiếp tục rocking với Java uahauhauhauhauah !! –

1

Tôi không nghĩ rằng bạn có thể làm điều đó. Theo danh sách JPA spec (section 4.6.9. page 185) không được hỗ trợ dưới dạng toán hạng bên trái với biểu thức IN.

+0

như @AVolpe đã nói trong câu trả lời bên dưới ... nó hoạt động với Hibernate 4 bằng phương pháp setParameterList –

Các vấn đề liên quan