很偶然的,发现在整合SpringSide3的Hibernate时,执行类似
entityDao.save(entity1);
entityDao.save(entity2);
代码,P6SPY的抓取SQL,只记录了一条insert语句。
一度以为是我改造的P6SPY版本有问题,
今天再研究这个问题时,发现当日志级别为debug时,出现了AbstractBatch这个类,于是我怀疑,Hibernate在session提交时的dirty check阶段会只能判断一个entity的save情况,大于一次的就使用批量插入来加快效率。
但是P6SPY这个框架可能对jdbc的批量更新没有做完善,导致只记录了最后一次插入的sql。
最后使用jdbcTemplate.batchUpdate()方法证实了这个想法。
再次记录一下,也算解决了困扰多时的一个问题,虽然并不是非常重要。
要彻底解决的话,还要系统的看P6SPY的源代码,暂时没有这个精力。
另:话说P6SPY自从2005年发布了1.3版后就停止更新了,不过我很“神奇”的发现github上有一个叫P6SPY的项目,而作者就是patmoore,版本到了 2.0-SNAPSHOT 噢。