查询以获取HQL中特定列的计数

时间:2020-09-05 09:01:13

标签: hibernate hql

谁能告诉我如何获取HQL中特定列的计数。 在下面的代码中,我想要具有参数sClass和section的行数。 某些数据来自sClass和section的前端,在此基础上,我需要计数。

for(int i=0; i<= (n-m); i++)

1 个答案:

答案 0 :(得分:0)

您无需在select子句中使用查询参数。

您可以简单地使用下面提供的实用程序类:

Query query = sessionFactory.getCurrentSession().createQuery("select count(*) " +
            "from student_details sd " +
            "where sd.sClass=:sClass and sd.section=:section");
    
query.setParameter("sClass", sClass);
query.setParameter("section", section);

int count = HibernateUtils.count(query);

实用程序类:

public final class HibernateUtils {

    private HibernateUtils() {

    }

    public static int count(Query query) {
        Number result = (Number) query.uniqueResult();
        return result == null ? 0 : result.intValue();
    }

    public static int count(Criteria countCriteria) {
        Number count = (Number) countCriteria
                .setProjection(Projections.rowCount())
                .uniqueResult();
        return count.intValue();
    }
}

您还可以使用Criteria(第二种实用方法)进行计数。

实现注意:请记住,您应该在HQL中指定实体名称(而非表名称)。因此,如果您有一个表student_details和一个实体StudentDetail(不是复数),则必须编写:

select count(*) from StudentDetail sd