在HQL查询中使用枚举列表作为参数 [英] using enum list as parameter in HQL query
问题描述
我有一个名为 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屋!