这是一个较晚的答案:-)尽管我不确定情况是否有所改变。
最近,我遇到了非常相同的需求,并使用concat解决了该需求,即通过将列连接为伪列,然后连接到countDistinct伪列。
但是我不能使用,criteriaBuilder.concat因为它生成了||用于串联的JPQL ,而Hibernate遇到了麻烦。
幸运的是@Formula,因此,我将伪列映射到具有以下内容的字段@Formula:
@Entity
public 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;
}
Run Code Online (Sandbox Code Playgroud)
这样,我终于可以将concated字段用于CriteriaBuilder.countDistinct:
//...
Expression<?> exp = criteriaBuilder.countDistinct(entity.get("concated"));
criteriaQuery.select(exp);
TypedQuery<Long> query = entityManager.createQuery(criteriaQuery);
return query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)
我希望JPA将(或希望已经)支持countDistinct多列,这样就可以避免所有这些混乱情况。
| 归档时间: |
|
| 查看次数: |
4242 次 |
| 最近记录: |