hibernate debug学习总结
生活随笔
收集整理的這篇文章主要介紹了
hibernate debug学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hibernate的Debug設置
If you want to see SQL binding value, just do as follows:
1.? set properties
??? <property name="hibernate.show_sql">true</property>
??? <property name="hibernate.format_sql">true</property>
2.? log4j
??? log4j.logger.org.hibernate.type=debug
========
怎么讓Hibernate不打印日志?
??? 我使用Log4j來打印日志的,但每次對數據庫操作都會打印一大堆Hibernate3.2的日志【Debug級別】,把有用的信息都給淹沒了,相當煩人。。。??? 我做了以下幾件事,都不能屏蔽hibernate的【Debug】日志:
??? 1:在Log4j.properties(位于src目錄下)里面添加以下配置信息:
??? log4j.logger.net.sf.hibernate=ERROR
??? ### log JDBC bind parameters ###
??? log4j.logger.org.hibernate=ERROR
??? log4j.logger.org.hibernate.type=ERROR
??? ### log schema export/update ###
??? log4j.logger.org.hibernate.SQL=ERROR
??? log4j.logger.org.hibernate.hql.ast.AST=ERROR
??? log4j.logger.org.hibernate.tool.hbm2ddl=ERROR
??? log4j.logger.org.hibernate.hql=ERROR
??? log4j.logger.org.hibernate.cache=ERROR
??? log4j.logger.org.hibernate.transaction=ERROR
??? log4j.logger.org.hibernate.jdbc=ERROR
??? log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=ERROR
??? 2:當嘗試刪除Log4j.properties,所有的日志都不打印了,包括自己添加的日志和Hibernate的日志。
??? 3:將slf4j-api-1.6.4.jar和slf4j-log4j12-1.6.4.jar放到Lib目錄下,并添加進Java Build Path。
??? 4:刪除commons-logging.jar
??? 請問基于以上的這些試驗,我的問題該如何解決,謝謝!
??? 將級別有debug提高到info
??? 在Log4j.properties里嗎?我已經搞成INFO了,可還是不行
??? log4j.rootLogger=INFO,A1,R
??? 你清楚一下 緩存重啟才行。
??? 請問怎么清除緩存啊?
??? 我clean了一下編譯結果,重新運行還是不行。
========
hibernate日志配置 ?
在hibernate使用的日志標準都為slf,slf可以看作為它的接口,因此需要找到它的實例,為我們做日志。
我們選擇使用log4j為實例。
1、 為防止沖突,先將slf4j-nop的jar包(它也是slf的一個實例)去除
2、 加入log4j的jar包。
3、 加入轉換包 slf4j-log4j ?
4、 src下假如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
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug? //可關閉,使用了debug跟蹤整個程序數據連接的每一步過程
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL 僅輸出SQL語句
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug?? //跟蹤輸出,JDBC參數查詢的日志
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
========
Hibernate調試——定位查詢源頭
本文由 ImportNew - jessenpan 翻譯自 javacodegeeks。歡迎加入翻譯小組。轉載請見文末要求。
為什么有時Hibernate會在程序某一部分生成一條指定sql查詢?這個問題讓人很難立刻理解,當處理不是我們本人編寫的代碼時更是如此。
本文將展示如何配置來產生Hibernate查詢操作的日志。通過這些日志和一些小技巧來找出這些指定的查詢為什么及在何處被執行。
Hibernate查詢日志格式
Hibernate內建的查詢日志格式如下:
?? ?
select /* load your.package.Employee */ this_.code, ...
from employee this_
where this_.employee_id=?
?
TRACE 12-04-2014@16:06:02? BasicBinder - binding parameter [1] as [NUMBER] - 1000
為什么Hibernate不能記載最終的查詢日志?
需要注意的是,Hibernate只記錄從它發送到JDBC的準備語句(prepared statement)及參數。準備語句使用“?”作為查詢參數的占位符,這些參數的實際值被記錄在準備語句的下方。
這些準備語句和最終發送到數據庫的sql語句是不同的,對于這些最終的查詢操作Hibernate無法記錄。出現這種情況的原因是Hibernate只知道它發送給JDBC的準備語句和參數,實際的查詢是由JDBC構建并發送給數據庫的。
為了產生實際查詢的日志,像log4jdbc這種工具是必不可少的,這里不會討論如何使用log4jdbc。
如何找到原始查詢操作
上述的可記錄查詢包含一條標注,在大多數情況下它可以標識某條起始查詢語句。如果一條查詢是由加載引起的,那么標注便是/*load your.entity.Name*/。如果是一條命名查詢,那么標注則包含查詢的名稱。
如果它是一個對應許多延遲加載的查詢,標注則會包含對應類的名稱和引發該操作的屬性值等。
設置Hibernate的查詢日志
為了獲得查詢日志,需要將如下標簽加入會話工廠的配置文件中:
?? ?
<bean id= "entityManagerFactory" >
? ...
? <property name="jpaProperties" >
? <props>
????? <prop key="hibernate.show_sql" >true</ prop>
????? <prop key="hibernate.format_sql" >true</ prop>
????? <prop key="hibernate.use_sql_comments">true</prop>
? </props>
</property>
上面的示例展示了Spring實體管理工廠的配置。下面是對一些標簽的解釋:
??? show_sql:激活查詢日志功能。
??? format_sql:優雅地輸出Sql。
??? use_sql_comments:添加一條解釋型標注。
為了記錄查詢語句的參數信息,log4j或者相對應的信息是需要的。
?? ?
<logger name="org.hibernate.type">
??? <level value="trace" />
</logger >
如果上述功能都不能運行
在大多數情況下,use_sql_comments創建的標注是足夠用來標識查詢的起始。但如果這還不夠,我們可以標識和數據表名相關聯的查詢返回的實體,并在返回的實體構造函數中設置斷點。
如果一個實體沒有構造函數,我們可以創建一個構造函數并把斷點設置在super()函數調用中。
?? ?
@Entity
public class Employee {
??? public Employee() {
??????? super(); // put the breakpoint here
??? }
??? ...
}
設置斷點后,跳轉到包含程序堆棧信息的Debug界面并從頭到尾執行一遍。這樣在調用棧中將會出現查詢操作在何處被創建。
原文鏈接: javacodegeeks 翻譯: ImportNew.com - jessenpan
譯文鏈接: http://www.importnew.com/12303.html
========
http://blog.csdn.net/chszs/article/details/46482297
在Hibernate中開啟日志
總結
以上是生活随笔為你收集整理的hibernate debug学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIT的概念
- 下一篇: VS条件断点学习总结