Det är troligt att dina frågor skrivs om men du skulle inte veta om det genom att titta på Hibernate SQL-loggarna. Hibernate skriver inte om infogningssatserna - MySQL-drivrutinen skriver om dem. Med andra ord kommer Hibernate att skicka flera infogningssatser till föraren, och sedan kommer föraren att skriva om dem. Så Hibernate-loggarna visar bara vad SQL Hibernate skickade till drivrutinen, inte vilken SQL som drivrutinen skickade till databasen.
Du kan verifiera detta genom att aktivera MySQL:s profileSQL-parameter i anslutnings-url:
<b:property name="jdbcUrl" value="jdbc:mysql://server:3306/db?autoReconnect=true&rewriteBatchedStatements=true&profileSQL=true" />
Med ett exempel som liknar ditt, så här ser min produktion ut:
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)
De första 10 raderna loggas av Hibernate men detta är inte vad som faktiskt skickas till MySQL-databasen. Den sista raden kommer från MySQL-drivrutinen och den visar tydligt en enda batch-inlaga med flera värden och det är det som faktiskt skickas till MySQL-databasen.