我在用着CriteriaBuilder.concat
使用以下代码连接 2 个字符串:
Expression<String> concat = criteriaBuilder.concat(expr1, expr2)
但生成的 SQL 是这样的:
select distinct col_1 || col_2
什么导致org.hibernate.hql.ast.QuerySyntaxException
:
expecting CLOSE, found '||' near line 1, column 48 [
select count(distinct generatedAlias0.hostname || generatedAlias0.device) from ...
^(1,48)
我想知道如何强制它生成以下使用以下 SQLconcat()
函数,而不是||
操作员?
select distinct concat(col_1, col_2)
Update:
从错误中我们可以看出问题更多出在Hibernate上(v3.6.10.Final
) 方面,这就是为什么让 MySQL 接受||
因为串联没有帮助,更新到新版本对我来说也不是一个选择。
谢谢
我实际上已经找到了解决方法。通过使用@Formula http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e2785(来自 Hibernate)而不是CriteriaBuilder
对于同一任务,如下所示:
@Entity
public class MyEntity {
@Column(name="col_a")
private String colA;
@Column(name="col_b")
private String colB;
@Formula("concat(col_a, col_b)")
private String concated;
//...
}
这样我就可以使用concated
字段为CriteriaBuilder.countDistinct
:
//...
Expression<?> exp = criteriaBuilder.countDistinct(entity.get("concated"));
criteriaQuery.select(exp);
TypedQuery<Long> query = entityManager.createQuery(criteriaQuery);
return query.getSingleResult();
我希望 JPA 能够(或者希望已经)支持countDistinct
如果有多个列,那么所有这些混乱都是可以避免的(参见:如何对多列进行不同计数 https://stackoverflow.com/questions/9184135/how-to-countdistinct-on-multiple-columns,答案是NO).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)