спящий режим как показывать критерии запросов - PullRequest
5 голосов
/ 10 января 2011

Я думаю, что это простой вопрос, хотя я не знаю, как его решить.

В приложении Spring / Hibernate мне нужно показать запрос, который выполняет критерий.

Iзнаю, что я могу использовать свойство show_sql и регистрировать запросы, используя log4j или любую другую структуру ведения журналов, но мне нужен более высокий уровень ведения журналов.

У меня есть такой метод

public void searchIntegrationClient(IntegrationClientSearchCommand integrationClientSearchCommand,PartialList<IntegrationClient> partialList) {
    Session session = getSession();
    Criteria pageCriteria=session.createCriteria(IntegrationClient.class);
    if(StringUtil.isNotEmpty(integrationClientSearchCommand.getNameCmd())){
        pageCriteria.add(Restrictions.like("name", integrationClientSearchCommand.getNameCmd(), MatchMode.START));
    }

    //adding ordering alphabetically
    pageCriteria.addOrder(Order.asc("name"));


    pageCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    List<IntegrationClient> list = (List<IntegrationClient>)pageCriteria.list();
    partialList.setPartialResultList(list);
    Criteria countCriteria=session.createCriteria(IntegrationClient.class);
    if(StringUtil.isNotEmpty(integrationClientSearchCommand.getNameCmd())){
        countCriteria.add(Restrictions.like("name", integrationClientSearchCommand.getNameCmd(), MatchMode.START));
    }
    countCriteria.setProjection(Projections.rowCount());
    partialList.setTotalNumberOfRecords(((Integer)countCriteria.uniqueResult()).intValue());

    releaseSession(session);
}

Мне нужно до того, как запустит attribute.list, чтобы отобразить запрос, который будет выполнен?

Есть ли в API критериев какой-либо служебный класс для показа запроса наподобие того, что я хочу?

Заранее спасибо

1 Ответ

9 голосов
/ 03 августа 2011

Я не знаю ни о каком служебном классе в API критериев JPA. Но есть возможность отображения операторов SQL на уровне персистентности гибернации.

Добавьте следующую строку в файл persistence.xml :

   <properties>
      <property name="hibernate.show_sql" value="true" />
   </properties>

Если вы используете log4j, вы также можете установить уровень ведения журнала org.hibernate.type на TRACE , который покажет вам еще более подробную информацию в журналах. Добавьте эти строки в ваш log4j-config (вам нужен, конечно, какой-нибудь адаптер под названием «FILE»):

<category name="org.hibernate.type">
    <priority value="TRACE"/>
    <appender-ref ref="FILE"/>
</category>

Надеюсь, это поможет ...

...