2011-05-04 135 views
2

在書「Java持久性與Hibernate」我遇到了這樣一行:啓用休眠啓動日誌

Hibernate produces all trivial CRUD SQL at startup. It caches the SQL statements 
internally for future use, thus avoiding any runtime cost of SQL generation for the 
most common operations. 

要查看啓動日誌,它說:

Enable DEBUG logging for the org.hibernate.persister.entity package, and watch (or search) the 
Hibernate startup log. 

我有一個平凡的具有一個實體的應用程序我堅持在數據庫中的消息。

我在我的配置文件中啓用show_sql=true。你可以看到我下面的配置文件:

<session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/ajax</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">XXXX</property> 

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <!-- Use the C3P0 connection pool provider --> 
    <property name="hibernate.c3p0.min_size">5</property> 
    <property name="hibernate.c3p0.max_size">20</property> 
    <property name="hibernate.c3p0.timeout">300</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">3000</property> 
    <!-- Show and print nice SQL on stdout --> 
    <property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <!-- List of XML mapping files --> 
    <mapping resource="org/myapp/hibernate/first/Message.hbm.xml" /> 
</session-factory> 

我Log4J.properties:

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p %c{1}:%L - %m%n 
# Root logger option 
log4j.rootLogger=DEBUG, stdout 
# Hibernate logging options (INFO only shows startup messages) 
log4j.logger.org.hibernate=DEBUG 
# Log JDBC bind parameter runtime arguments 
log4j.logger.org.hibernate.type=DEBUG 
log4j.logger.org.hibernate.persister.entity=DEBUG 
log4j.logger.org.hibernate.SQL=DEBUG 

通過這些設置,我可以看到SQL得到印在控制檯當我保存/更新我的實體。

但我沒有看到的是啓動日誌(我在頂部提到)。 Hibernate確實生成了SQL,但不是在應用程序開始時,它只在我開始處理實體時才發生。

這裏有什麼問題?

+0

究竟是什麼問題?你看到'org.hibernate.persister.entity'記錄器的輸出嗎? – axtavt 2011-05-04 08:57:01

+0

@axtavt - 啓動時不會出現該類的日誌。 – Vicky 2011-05-06 16:37:57

回答

1

這聽起來像你期待的那樣,你會看到一系列的SQL查詢滾動。這不是發生了什麼。

儘管Hibernate正在計算所需的SQL查詢,但並未實際運行它們,所以您沒有通過「show_sql = true」日誌指令查看它們。

但是,如果您在命名查詢中存在錯誤,例如它會在啓動時引發異常,這是我發現使用命名查詢非常有用的原因之一。