给出以下实体类:
@Entity
public class Client {
@Id private
Long id;
@CollectionTable
@ElementCollection
private List<String> accounts;
// getters and setters here
}
我想找到所有客户的任何帐号等于(不区分大小写)搜索字词。尝试以下JPQL没有运气:
select c from Client c join c.accounts a where upper(a) = ?1
在EclipseLink 2.4.2和2.5上,这都失败了,但有以下异常:
Exception Description: Syntax error parsing [select c from Client c join c.accounts a
where upper(a) = ?1].
[53, 54] The encapsulated expression is not a valid expression.
当更改@ElementCollection以使用@OneToMany的帐号的完整实体时,一切正常。此外,从jpql中删除upper()时,查询运行正常。最终我们要为此使用QueryDSL,但目前这个querydsl查询
QClient qc = QClient.client;
StringPath a = Expressions.stringPath("a")
new JPAQuery(em).from(qc).innerJoin(qc.accounts, a).where(a.upper().eq(term)).list(qc)
还有这个
new JPAQuery(em).from(qc).where(qc.accounts.any().upper().eq(term)).list(qc)
失败并出现类似错误,大概是因为它们被转换为相同的jpql。
如何更改任何这些查询以产生所需的结果?