5

我试图掌握hibernate在幕后所做的事情,并且我使用p6spy作为mysql jdbc驱动程序的代理,这样我就可以看到数据库的真正内容。但是,我对 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||

我可以看到两个“批处理”语句,大概来自对 j​​dbc addBatch api 的调用,但是那个 '1274973057267|2|1|statement' 在那里做什么?看起来第二次插入重复了,但我知道不是这样,否则我会在我的数据库中看到 3 行而不是两行,或者至少是一个错误。

为什么我看到第二个插入语句重复?

如果我在我的 spy.properties 中排除“批处理”,我只会看到这条奇怪的流氓行。

感谢您的任何照明!

4

3 回答 3

4

啊 - 我看到了问题,这似乎是由于我不得不说的是 p6spy 中一个相当令人惊讶的设计决定。

显然,对于批处理语句,决定在将语句添加到批处理时记录它们,然后显示实际执行批处理时执行的 LAST 语句!一旦您知道该工具的作用,我想您就可以理解它为何存在,但除非您碰巧在这里阅读了该主题,否则它会完全令人困惑且违反直觉:

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

于 2010-05-27T15:33:17.420 回答
3

spy.properties文件中,默认属性excludecategories[info,debug,result,batch],你可以排除batch类别,然后你会得到你想要的。

于 2013-01-09T10:23:14.087 回答
0

它的尾部(513)看起来像时间戳的一部分替代文字

于 2010-12-15T15:32:37.143 回答