sql >> Databasteknik >  >> RDS >> Mysql

Oavsett vad kan jag inte batcha MySQL INSERT-satser i Hibernate

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&amp;rewriteBatchedStatements=true&amp;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.




  1. Hur filtrerade index kan vara en mer kraftfull funktion

  2. Få Visa information med VIEWS Information Schema View i SQL Server

  3. Vad är det maximala antalet tecken som nvarchar(MAX) rymmer?

  4. Hur man hittar SQL Server Agent-jobb i Azure Data Studio