使用枚举列表作为HQL查询中的参数

Bru*_*ana 8 java enums persistence hibernate hql

我有一个Band带有属性的实体List<Genres> genres,Genres是一个带有以下值的ENUM:ALTERNATIVE_ROCK("Alternative Rock"), CLASSIC_ROCK("Classic Rock"), HARD_ROCK("Hard Rock"), HEAVY_METAL("Heavy Metal"),PROGRESSIVE_ROCK("Progressive Rock");

我正在尝试使用HQL 创建一个List<Band>使用List<Genres>as参数返回的方法,如:

public List<Band> listBandsPerGenres(List<Genres> genres);
Run Code Online (Sandbox Code Playgroud)

但我收到了一些我尝试过的HQL查询错误?

以上我试过的一些hql查询...

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

返回一个错误,指出无法将ArrayList强制转换为枚举...

要么...

"SELECT b FROM Band b JOIN FETCH b.genres g WHERE g.value IN (?)"
Run Code Online (Sandbox Code Playgroud)

返回如下错误:dereference标量集合元素ENUM

属性类型映射,实体Band ...

    @Basic(optional=false)
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass=Genres.class)
    @CollectionTable(name="banda_generos", joinColumns=@JoinColumn(name="id_banda", nullable=false))
    private List<Genres> genres;
Run Code Online (Sandbox Code Playgroud)

Art*_*lpe 8

这适用于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()));
Run Code Online (Sandbox Code Playgroud)

检查方法Query#setParameterList是用来代替Query#setParameter,也是它的使用ginsted的的g.value.