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
相关产品推荐
相关产品推荐

