在HQL查询中使用枚举列表作为参数 [英] using enum list as parameter in HQL query

查看:541
本文介绍了在HQL查询中使用枚举列表作为参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 Band 的实体,具有一个属性 List&>类型>流派是一个具有以下值的ENUM: ALTERNATIVE_ROCK(Alternative Rock),CLASSIC_ROCK(Classic Rock),HARD_ROCK(Hard Rock),HEAVY_METAL 重金属),PROGRESSIVE_ROCK(Progressive Rock);

I have an entity called Band with a attribute List<Genres> genres, Genres is a ENUM with the following values: ALTERNATIVE_ROCK("Alternative Rock"), CLASSIC_ROCK("Classic Rock"), HARD_ROCK("Hard Rock"), HEAVY_METAL("Heavy Metal"),PROGRESSIVE_ROCK("Progressive Rock");

我正在尝试创建一个返回列表< Band> 使用列表<类型> 作为参数使用HQL,类似于:

I'm trying to create a method that returns a List<Band> using an List<Genres> as parameter using HQL, something like:

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

但是,我收到一些我试过的HQL查询的错误?

But i'm receiving some errors with HQL queries that i'd tried?

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

Above some hql queries that i've tried...

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

返回一个错误,表示ArrayList无法转换为枚举...

returns an error saying that an ArrayList cannot be cast to Enum...

或...

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

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

returns an error like : dereference scalar collection element ENUM

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

property genres mapping, entity 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;


推荐答案

这适用于Hibernate 4

This works for 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()));

检查方法 Query#setParameterList 是使用查询#setParameter ,它也用于 g insted的 g.value

Check that the method Query#setParameterList is used instead of Query#setParameter, also it's used g insted of g.value.

这篇关于在HQL查询中使用枚举列表作为参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆