这是一个较晚的答案:-)尽管我不确定情况是否有所改变。
最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为 伪列 ,然后
countDistinct将其连接到 伪列
上。
但是我不能使用,
criteriaBuilder.concat因为它生成了
||用于串联的JPQL
,而Hibernate遇到了麻烦。
幸运的是
@Formula,因此,我将伪列映射到具有以下内容的字段
@Formula:
@Entitypublic class MyEntity { @Column(name="col_a") private String colA; @Column(name="col_b") private String colB; @Formula("concat(col_a, col_b)") // <= THE TRICK 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多列,这样就可以避免所有这些混乱情况。



