2010-05-27 67 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类别,那么你会得到你想要的。