2017-02-22 27 views
1

Я довольно новичок в спящем режиме. Так что это может быть простым вопросом для всех вас. У меня есть таблица под названием BuildHistory. В том, что у меня есть столбец с именем Status. Я хочу получить общее количество записей в этой таблице, значение статуса которой - УСПЕХ.Запрос на гибернацию, чтобы получить общее количество записей в столбце с определенным значением

UPDATE

Это мой метод, который я использую для получения счета.

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; 
} 

ответ

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-инъекции.

+0

так что он будет возвращать? Счет (целое число) или список? – sreehari

+0

@sreehari Это должно возвращать счет, который вы должны безопасно обрабатывать как целое число Java. –

+0

Я выполнил запрос, как показано ниже. Запрос запроса = session.createQuery ("select sum (case, когда bh.status =:" + sql + ", затем 1 else 0 end) из BuildHistory bh"); Но я получаю исключение транзакции – sreehari

 Смежные вопросы

  • Нет связанных вопросов^_^