sql >> データベース >  >> RDS >> Mysql

何があっても、HibernateでMySQLINSERTステートメントをバッチ処理できません

    クエリが書き直されている可能性がありますが、HibernateSQLログを見てもわかりません。 Hibernateは挿入ステートメントを書き換えません-MySQLドライバーはそれらを書き換えます。つまり、Hibernateは複数の挿入ステートメントをドライバーに送信してから、ドライバーがそれらを書き換えます。したがって、Hibernateログには、ドライバーがデータベースに送信したSQLではなく、ドライバーに送信したSQLHibernateのみが表示されます。

    これを確認するには、接続URLでMySQLのprofileSQLパラメータを有効にします。

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

    あなたと同じような例を使用すると、これは私の出力がどのように見えるかです:

    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行はHibernateによってログに記録されていますが、これは実際にMySQLデータベースに送信されているものではありません。最後の行はMySQLドライバーからのものであり、複数の値を持つ単一のバッチ挿入を明確に示しています。これが実際にMySQLデータベースに送信されているものです。




    1. OracleのCOS()関数

    2. オンライン調査のためのデータベースモデル。パート2

    3. PostgreSQLのチェック制約を理解する

    4. 1つの挿入クエリphpによってmysqlの2つの異なるテーブルにデータを挿入することは可能ですか?