Có thể các truy vấn của bạn đang được viết lại nhưng bạn sẽ không biết nếu nhìn vào nhật ký SQL Hibernate. Hibernate không viết lại các câu lệnh chèn - trình điều khiển MySQL viết lại chúng. Nói cách khác, Hibernate sẽ gửi nhiều câu lệnh chèn tới trình điều khiển, và sau đó trình điều khiển sẽ viết lại chúng. Vì vậy, nhật ký Hibernate chỉ hiển thị cho bạn những gì SQL Hibernate đã gửi đến trình điều khiển, chứ không phải SQL nào mà trình điều khiển đã gửi đến cơ sở dữ liệu.
Bạn có thể xác minh điều này bằng cách bật tham số profileSQL của MySQL trong url kết nối:
<b:property name="jdbcUrl" value="jdbc:mysql://server:3306/db?autoReconnect=true&rewriteBatchedStatements=true&profileSQL=true" />
Sử dụng một ví dụ tương tự như của bạn, đây là kết quả đầu ra của tôi trông như thế nào:
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)
10 dòng đầu tiên đang được ghi lại bởi Hibernate mặc dù đây không phải là những gì thực sự đang được gửi đến cơ sở dữ liệu MySQL. Dòng cuối cùng đến từ trình điều khiển MySQL và nó hiển thị rõ ràng một đoạn chèn hàng loạt với nhiều giá trị và đó là những gì thực sự đang được gửi đến cơ sở dữ liệu MySQL.