Prawdopodobnie Twoje zapytania są przepisywane, ale nie wiesz tego, patrząc na logi Hibernate SQL. Hibernate nie przepisuje instrukcji insert - sterownik MySQL je przepisuje. Innymi słowy, Hibernate wyśle do sterownika wiele instrukcji INSERT, a następnie je przepisze. Tak więc dzienniki Hibernate pokazują tylko to, co SQL Hibernate wysłał do sterownika, a nie jaki SQL sterownik wysłał do bazy danych.
Możesz to sprawdzić, włączając parametr profileSQL MySQL w adresie URL połączenia:
<b:property name="jdbcUrl" value="jdbc:mysql://server:3306/db?autoReconnect=true&rewriteBatchedStatements=true&profileSQL=true" />
Używając przykładu podobnego do twojego, oto jak wygląda moje wyjście:
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)
Hibernate rejestruje pierwszych 10 wierszy, chociaż nie jest to faktycznie przesyłane do bazy danych MySQL. Ostatnia linia pochodzi ze sterownika MySQL i wyraźnie pokazuje pojedynczą wstawkę wsadową z wieloma wartościami i właśnie to jest wysyłane do bazy danych MySQL.