pra*_*upd 5 hibernate hql jpql
我有一个Service包含tags以下集合的域:
@Entity
public class Service extends AbstractEntity<Long> {
private static final long serialVersionUID = 9116959642944725990L;
@ElementCollection(fetch = FetchType.EAGER, targetClass = java.lang.String.class)
@CollectionTable(name = "service_tags", joinColumns = @JoinColumn(name = "s_id"))
@Column(name = "tag")
private Set<String> tags;
}
Run Code Online (Sandbox Code Playgroud)
我想选择Service小号with特定KEY的Service.tags。
hql接合Service到Service.tags是如下:
select s from Service s INNER JOIN s.tags t where s.status=0 and (s.serviceType=9 or t.tag in ('College'))
Run Code Online (Sandbox Code Playgroud)
但是,上面的 hql 返回给我以下异常:
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: cannot dereference scalar collection element: tag [select s from com.zazzercode.domain.Service s INNER JOIN s.tags t where s.status=0 and (s.serviceType=9 or t.tag in ('College')) ]
Run Code Online (Sandbox Code Playgroud)
select s from Service s INNER JOIN s.tags t where s.status=0 虽然有效。
查看JPQL 查询非实体集合,我尝试如下
"select s from Service s where s.status=0 and s.priviligedUser.priviligedUserType IN (2,4) and (s.serviceType=9 or (KEY(s.tags)='tag' and (VALUE(s.tags)='College'))"
Run Code Online (Sandbox Code Playgroud)
得到以下异常:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: null near line 1, column 188 [select s from com.esewa.server.entity.Service s where s.status=0 and (s.serviceType=9 or (KEY(s.tags)='tag' and (VALUE(s.tags)='College'))]
Run Code Online (Sandbox Code Playgroud)
几个月前,我使用标准 api实现了同样的目标。
"select s from Service s INNER JOIN s.tags t where s.status=0 and and (s.serviceType=9 or VALUE(s.tags) in ('College')) "
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3925 次 |
| 最近记录: |