如何解决如何使用JPA和Criteria API对不区分大小写的列进行区分计数
如何使用JPA标准API进行以下操作?
select count(distinct LOWER(column)) from table
这在没有LOWER(column)
的情况下有效,但未产生预期的结果。
但是使用LOWER(column)
,Hibernate抛出了org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE,found '('
。
有人可以帮我吗?
解决方法
我建议以下原始查询:
SELECT COUNT(DISTINCT col_lower) AS cnt
FROM
(
SELECT LOWER(column) AS col_lower
FROM yourTable
) t;
然后,我试图考虑一种使用JPQL表示此信息的方法,但是JPQL仅支持WHERE
和HAVING
子句中的子查询。因此,您可能需要在此处使用原始查询,也可能需要使用Criteria API。
尝试这样的事情:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Table> r = cq.from(Table.class);
cq.select(cb.lower(r.get(Table_.column))).distinct(true);
TypedQuery<String> query = em.createQuery(cq);
Long counter = query.getResultList().size();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。