Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quoi qu'il en soit, je ne peux pas regrouper les instructions MySQL INSERT dans Hibernate

Il est probable que vos requêtes soient réécrites, mais vous ne le sauriez pas en consultant les journaux Hibernate SQL. Hibernate ne réécrit pas les instructions d'insertion - le pilote MySQL les réécrit. En d'autres termes, Hibernate enverra plusieurs instructions d'insertion au pilote, puis le pilote les réécrira. Ainsi, les journaux d'Hibernate ne vous montrent que ce que SQL Hibernate a envoyé au pilote, pas quel SQL le pilote a envoyé à la base de données.

Vous pouvez le vérifier en activant le paramètre profileSQL de MySQL dans l'url de connexion :

<b:property name="jdbcUrl" value="jdbc:mysql://server:3306/db?autoReconnect=true&amp;rewriteBatchedStatements=true&amp;profileSQL=true" />

En utilisant un exemple similaire au vôtre, voici à quoi ressemble ma sortie :

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)

Les 10 premières lignes sont enregistrées par Hibernate bien que ce ne soit pas ce qui est réellement envoyé à la base de données MySQL. La dernière ligne provient du pilote MySQL et montre clairement une seule insertion de lot avec plusieurs valeurs et c'est ce qui est réellement envoyé à la base de données MySQL.