sql >> Database >  >> RDS >> Mysql

Wat er ook gebeurt, ik kan MySQL INSERT-instructies niet batchgewijs in Hibernate

Het is waarschijnlijk dat uw query's worden herschreven, maar u zou het niet weten door naar de Hibernate SQL-logboeken te kijken. Hibernate herschrijft de insert-statements niet - het MySQL-stuurprogramma herschrijft ze. Met andere woorden, Hibernate stuurt meerdere insert-instructies naar het stuurprogramma en het stuurprogramma herschrijft ze. De logboeken van de slaapstand laten dus alleen zien wat SQL Hibernate naar de driver heeft gestuurd, niet welke SQL de driver naar de database heeft gestuurd.

U kunt dit verifiëren door MySQL's profileSQL-parameter in verbindings-url in te schakelen:

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

Aan de hand van een voorbeeld dat vergelijkbaar is met het uwe, ziet mijn uitvoer er als volgt uit:

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 eerste 10 regels worden gelogd door Hibernate, hoewel dit niet echt naar de MySQL-database wordt verzonden. De laatste regel komt van het MySQL-stuurprogramma en het toont duidelijk een enkele batch-insert met meerdere waarden en dat is wat daadwerkelijk naar de MySQL-database wordt verzonden.




  1. Doctrine 2 Query Builder abs Functie

  2. Hoe gebruik ik variabelen in Oracle SQL Developer?

  3. Converteer timestamp datatype naar unix timestamp Oracle

  4. SQLite JSON_TREE()