2014-03-01 64 views
6

我正在用JPA/Hibernate使用Play Framework開發Web應用程序。出於調試目的,很高興看到JPA使用的SQL語句。已經有另一個thread與相同的問題,但它是關於播放1和給定的解決方案不適合我 - 看起來jpa.debugSQL=true不能用於播放2(沒有持久性提供商的EntityManager名爲真)。使用Play Framework 2時顯示JPA的SQL語句

相反,我添加了下面玩的application.conf:

db.default.logStatements=true 
logger.org.hibernate=DEBUG 

我不知道如果我需要兩條線,但至少SQL語句現在登錄。 但是對於大型查詢,Hibernate會打印大量調試消息,這些消息會使已打印的SQL語句在我的控制檯窗口中消失。我已經嘗試增加控制檯窗口的緩衝區,但這並沒有太大的改變。

爲了以舒適的方式檢查報表,我需要做些什麼?

編輯:

當設置logger.org.hibernateINFO,我不是在所有得到任何語句(即使db.default.logStatements=true)。

回答

6

首先嚐試與配置

db.default.logStatements=true 
logger.org.hibernate=DEBUG 

找出哪些類記錄的聲明(例如org.hibernate.xxx.StatementLogger)。 改回爲INFO org.hibernate作爲,並添加一個新行的語句記錄器包:

logger.org.hibernate=INFO 
logger.org.hibernate.xxx=DEBUG 
+1

完美,謝謝。最後,它是'logger.org.hibernate = INFO' +'logger.org.hibernate.SQL = DEBUG' – alapeno

0

不幸的是不知道的方式做到這一點在Hibernate中,反正在Ebean它的開啓和關閉在代碼中直接登錄可能反過來通過,即:

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true); 

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(false); 

在另一方面,如果Hibernate打印一個噸調試信息它可能表明您應該考慮優化您的查詢,即如果您獲得100個記錄與懶加載相關列表tions - ORM需要對丟失的數據執行額外的查詢,而用一個或多個查詢執行n *關係,因此它可能是真實的performance killer

+0

謝謝。它已經是一個帶有單個結果實體的單個查詢,但是爲了急切地加載一些一對多關係而進行了一些訪存連接。 – alapeno

+0

是的,我正在談論這個_eagerly load_,嘗試優化ypur查詢,或者手動執行第二個查詢和加入數據,否則當你去製作即到Heroku你可以大量驚訝(這些詞的意思不好) – biesior

2

我用用HikariCp以上建議的變化不是爲我工作休眠。相反,我用hibernate屬性來轉儲SQL,它工作正常。

在persistence.xml文件的屬性部分添加以下行。

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