You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate 4.X迁移至6.X:Projections替代代码逻辑正确性验证

Hibernate 4到6迁移:rowCount投影替换逻辑验证

替换逻辑是正确的,不过你的新代码里存在一处冗余代码需要修正。

旧代码逻辑解析

旧Hibernate 4的Projections.rowCount()作用是统计符合Restrictions.eq("123", "456")条件的ABCD实体记录总数,最终通过uniqueResult()返回Long类型的统计值。

新代码等价性说明

你用criteriaBuilder.count(root)替换Projections.rowCount()是完全等价的:两者都是计算匹配查询条件的实体行数,返回结果类型均为Long,且新代码中getSingleResult()和旧代码的uniqueResult()作用一致,都是获取唯一的统计结果。

新代码冗余修正

新代码里的criteriaQuery.select(root);属于冗余语句,因为后续的criteriaQuery.select(criteriaBuilder.count(root));会覆盖之前的select配置,虽然不影响最终结果,但建议删除这行冗余代码,修正后的代码如下:

CriteriaBuilder criteriaBuilder = getCurrentSession().getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<ABCD> root = criteriaQuery.from(ABCD.class);
criteriaQuery.where(criteriaBuilder.equal(root.get("123"), "456"));
criteriaQuery.select(criteriaBuilder.count(root));
Long ll = getCurrentSession().createQuery(criteriaQuery).getSingleResult();

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:01:01