2010-05-27 128 views
2

我試圖去弄清楚hibernate在底層做了什麼,我使用p6spy作爲mysql jdbc驅動程序的代理,以便我可以看到數據庫到底是什麼。然而,我對p6spy的輸出有點困惑 - 感謝任何燈光!hibernate p6spy問題

問題是這樣的。我創建了Test1類的兩個新對象,即test1a和test1b。在我的日誌輸出如下:

Hibernate: 
    /* insert com.play.hibernate1.Test1 
     */ insert 
     into 
      Test1 
      (name, value, id) 
     values 
      (?, ?, ?) 
1274973057265|1|1|batch|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values (?, ?, ?)|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values ('Test 1', 10, 5) 
Hibernate: 
    /* insert com.play.hibernate1.Test1 
     */ insert 
     into 
      Test1 
      (name, value, id) 
     values 
      (?, ?, ?) 
1274973057265|0|1|batch|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values (?, ?, ?)|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values ('Test 2', 20, 6) 
1274973057267|2|1|statement|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values (?, ?, ?)|/* insert com.play.hibernate1.Test1 */ insert into Test1 (name, value, id) values ('Test 2', 20, 6) 
1274973057268|0|1|commit|| 

我可以看到兩個「批」的語句,可能是從電話到JDBC addBatch API,但什麼是「1274973057267 | 2 | 1點|聲明」在那裏做什麼?它看起來像第二個插入重複,但我知道它不是,或者我會看到在我的數據庫3行,而不是兩個,或至少一個錯誤。

爲什麼我看到重複的第二條插入語句?

如果我在我的spy.properties中排除'batch',我只能看到這個奇怪的流氓線。

感謝您的任何照明!

回答

1

啊 - 我看到了這個問題,這似乎是由於我不得不說的是p6spy中一個相當令人驚訝的設計決定。

顯然,對於批處理語句,決定了在將日誌語句添加到批處理時,然後顯示批處理實際執行時執行的LAST語句!一旦你知道那是工具做什麼,我想你可以理解爲什麼它的存在,但除非你碰巧讀到這裏線程它是完全混亂和反直覺:

http://sourceforge.net/projects/p6spy/forums/forum/166969/topic/666877

0

它的尾端(513)看起來像時間戳alt text

0

在* spy.propertie * S文件的一部分,excludecategories默認屬性爲[info,debug,result,batch], 可以排除batch類別,那麼你會得到你想要的。