Hibernate查询获取具有特定值的列中的条目总数

时间:2017-02-22 05:14:03

标签: sql hibernate oracle11g hql

我对hibernate很新。所以这对你们所有人来说都是一个简单的问题。 我有一个名为BuildHistory的表。因为我有一个名为Status的列。 我想得到该表中状态值为SUCCESS的条目总数。

更新

这是我用来获取计数的方法。

public Object countStatus(String sql){
    Session session = HibernateServeletContextListner.sessionFactory_Dummy.openSession();
    Transaction tx = null;

    try {
        tx = session.beginTransaction();
        Query query = session.createQuery("select sum(case when bh.status = :"+sql+" then 1 else 0 end) from BuildHistory bh");
        tx.commit();
        //  return query.uniqueResult();
    } catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace(); 
    } finally {
        session.close(); 
    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

您应该能够使用HQL进行条件聚合。以下内容应该有效:

select sum(case when bh.status = :success then 1 else 0 end)
from BuildHistory bh

您可以使用以下Java代码:

String hql = "select sum(case when bh.status = :status then 1 else 0 end) ";
       hql += "from BuildHistory bh";
Query query = session.createQuery(hql);
query.setParameter("status", "success");
int sum = (Integer)query.uniqueResult();

这里的一个重点是我们使用预准备语句动态绑定 :status参数。在您的原始代码中,您试图将查询连接在一起,这很容易出错,并且SQL注入。