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)
这适用于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.
| 归档时间: |
|
| 查看次数: |
6306 次 |
| 最近记录: |