Sepertinya kueri Anda sedang ditulis ulang tetapi Anda tidak akan tahu apakah dengan melihat log SQL Hibernate. Hibernate tidak menulis ulang pernyataan insert - driver MySQL menulis ulang mereka. Dengan kata lain, Hibernate akan mengirimkan beberapa pernyataan penyisipan ke driver, dan kemudian driver akan menulis ulang. Jadi, log Hibernate hanya menunjukkan apa yang dikirim SQL Hibernate ke driver, bukan SQL yang dikirim driver ke database.
Anda dapat memverifikasi ini dengan mengaktifkan parameter profileSQL MySQL di url koneksi:
<b:property name="jdbcUrl" value="jdbc:mysql://server:3306/db?autoReconnect=true&rewriteBatchedStatements=true&profileSQL=true" />
Menggunakan contoh yang mirip dengan milik Anda, seperti inilah tampilan output saya:
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
insert into Person (firstName, lastName, id) values (?, ?, ?)
Wed Feb 05 13:29:52 MST 2014 INFO: Profiler Event: [QUERY] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) duration: 1 ms, connection-id: 81, statement-id: 33, resultset-id: 0, message: insert into Person (firstName, lastName, id) values ('person1', 'Name', 1),('person2', 'Name', 2),('person3', 'Name', 3),('person4', 'Name', 4),('person5', 'Name', 5),('person6', 'Name', 6),('person7', 'Name', 7),('person8', 'Name', 8),('person9', 'Name', 9),('person10', 'Name', 10)
10 baris pertama sedang dicatat oleh Hibernate meskipun ini bukan yang sebenarnya dikirim ke database MySQL. Baris terakhir berasal dari driver MySQL dan dengan jelas menunjukkan satu batch insert dengan beberapa nilai dan itulah yang sebenarnya dikirim ke database MySQL.