今天在項目運行過程中,一直報一個org.hibernate.exception.GenericJDBCException: could not insert 異常,Root Cause是IBM DB2 ErrorCode=-180,sqlstate=22007,經(jīng)過Google,發(fā)現(xiàn)這個錯誤的原因是因為Timestamp的格式不規(guī)范導致,但是具體是哪一項,卻不太清楚,如果能夠打印出導致問題的SQL語句,那么對于這類問題的定位就會非常容易了。
在Hibernate的配置文件hibernate.cfg.xml中有3個設置項跟顯示SQL語句相關,他們的值都是boolean值:
(1)、show_sql:是否顯示SQL語句
(2)、format_sql: 是否格式化輸出字符串,增強SQL的可讀性
(3)、use_sql_comments:是否顯示注釋,用于指示出是什么操作產生了這個SQL語句。
在默認情況下,Hibernate會把SQL語句打印在Console上,因此在開啟了上面的設置之后,可以在控制臺上看到如下結構的SQL語句:
/* load collection cc.unmi.test.model.Post.securities */ select
securities0_.post_id as post1_7_1_,
security1_.shareclassid as sharecla1_16_0_,
security1_.company_id as company2_16_0_,
from
Post_Security_Relationship securities0_
inner join
unmi.securities security1_
on securities0_.shareclassid=security1_.shareclassid
where
securities0_.post_id=?
可以發(fā)現(xiàn),在控制臺上根本看不到,SQL語句對應的參數(shù),一般情況下,Hibernate都會和Log4j配合使用,這樣就可以更加靈活的控制hibernate的日志文件輸出。在hibernate中,默認的關于SQL語句對應參數(shù)的輸出級別為TRACE,比默認的Log4j的日志等級DEBUG還要低一等級,因此,為了顯示參數(shù),還需手動設置一下log4j的配置,把hibernate下的輸出等級改為TRACE:
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j. loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE
這樣修改之后,打印的SQL語句會變?yōu)槿缦滦问剑?/p>
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26