質問
Hibernateがボンネットの下で行っていることを把握しようとしています。MySQLJDBCドライバーのプロキシとしてP6SPYを使用しているので、データベースに実際に何が起こっているのかがわかります。私はP6SPYからの出力に少し混乱しています - どんな光にも感謝しています!
問題はこれです。クラスTest1の2つの新しいオブジェクト、つまり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への呼び出しから、2つの「バッチ」ステートメントが表示されますが、そこで '1274973057267 | 2 | 1 |ステートメント'は何ですか? 2番目の挿入物が繰り返されているように見えますが、私はそれがそうではないことを知っています。
なぜ私は2番目の挿入ステートメントが繰り返されるのを見ているのですか?
spy.propertiesで「バッチ」を除外した場合、この奇妙で不正なラインだけが表示されます。
照明をありがとう!
解決
ああ - 私は問題を見ていますが、これは私が言わなければならないことがP6SPYでかなり驚くべきデザインの決定であると思われます。
どうやらバッチされたステートメントの場合、バッチに追加されると、声明を記録する決定が下され、バッチが実際に実行されたときに実行された最後のステートメントが表示されました!それがツールが行うことを知ったら、なぜそこにあるのかを理解できると思いますが、ここでスレッドを読んでいない限り、完全に混乱し、直感に反します。
http://sourceforge.net/projects/p6spy/forums/forum/166969/topic/666877
他のヒント
in *spy.propertie *sファイル、デフォルトのプロパティ excludecategories
は [info,debug,result,batch
]、除外できます batch
カテゴリ、あなたはあなたが望むものを手に入れます。
それのテールエンド(513)はタイムスタンプの一部のように見えます