2011-01-10 114 views
4

我认为这是一个简单的问题,虽然我不知道如何解决它。休眠如何显示条件查询

在Spring/Hibernate应用程序中,我需要显示查询条件执行。

我知道我可以使用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); 
} 

我之前需要一种方法执行criteria.list表明将要执行的查询?

在标准API中是否有任何实用程序类来显示查询,如我想要的?

Thnx预先

回答

8

我不知道JPA Criteria API中的任何实用程序类。但是可以在hibernate持久性级别上显示SQL语句。

以下行添加到您的的persistence.xml文件:

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

如果您正在使用log4j的,你还可以设置org.hibernate.typeTRACE,日志记录级别,其会在日志中显示更详细的信息。这些行添加到您的log4j-配置(你需要有一些适配器称为当然“文件”):

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

我希望这有助于...