java - 在 HQL 查询中使用枚举列表作为参数

标签 java hibernate enums persistence hql

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

我正在尝试创建一个返回 List<Band> 的方法使用 List<Genres>作为使用 HQL 的参数,类似于:

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

但是我收到了一些我尝试过的 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();

返回一个错误,指出无法将 ArrayList 转换为 Enum...

或者...

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

返回类似这样的错误:取消引用标量集合元素 ENUM

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

    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 而不是Query#setParameter,并且使用了g 而不是g。值

关于java - 在 HQL 查询中使用枚举列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27715453/

相关文章:

java - 如何使用 jTDS 为 Sybase JDBC 连接指定字符集?

java - 我无法导入 AppCompatActivity

java - 将 JSON(或对象)添加到 STRING json 数组

.net - 在 NHibernate 中映射枚举集合

java - jsp 页面中的 swf 播放器

java - 将对象保存到实体中而不将其保存在 JPA 中

java - @OneToMany 注解有用吗?

java - Hibernate 在不同线程上运行时不必要地创建新实体

c - sizeof(enum) == sizeof(int) 总是这样吗?

sql - 将数据库字符串枚举转换为整数值得吗?