我有一个名为 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/