2011-01-10 117 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> 

我希望這有助於...