冬眠+;mariadb java客户端+;重写BatchedStatements后出现mysql语法错误=true

冬眠+;mariadb java客户端+;重写BatchedStatements后出现mysql语法错误=true,java,mysql,hibernate,mariadb,Java,Mysql,Hibernate,Mariadb,我想通过批处理插入来提高性能。基于internet,我需要将rewriteBatchedStatements=true作为连接字符串的一部分。没有这些,一切都很好,但在添加这些之后,我会出现错误 (下面是错误,从日志中删除了表/字段名,其中一个是'value',因为我正在调试,如果原因是保留字,另一个是'id',其他不是保留字) 我已经试过使用hibernate.dialen作为org.hibernate.dialen.mysqldialen/mysql5dialen/mysql5innodbd

我想通过批处理插入来提高性能。基于internet,我需要将rewriteBatchedStatements=true作为连接字符串的一部分。没有这些,一切都很好,但在添加这些之后,我会出现错误

(下面是错误,从日志中删除了表/字段名,其中一个是'value',因为我正在调试,如果原因是保留字,另一个是'id',其他不是保留字)

我已经试过使用hibernate.dialen作为org.hibernate.dialen.mysqldialen/mysql5dialen/mysql5innodbdialen。不确定下一步要尝试什么,因此提出了这个问题

原因:org.mariadb.jdbc.internal.util.dao.QueryException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行使用接近“值”(2,'2016-01-21 16:18:42.82','2016-01-21 16:18:42.82',2157838336,NULL',的正确语法 查询是: 在TABLENAME(字段1、字段2、字段3、字段4、字段5、字段6)中插入值(?、、?、?、?、?、?、?)、参数:[1、'2016-01-21 16:18:42.817'、'2016-01-21 16:18:42.817',2157838336、NULL、223678] 在org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:475)~[mariadb-java-client-1.3.4.jar:?] 在org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.result(AbstractQueryProtocol.java:396)~[mariadb-java-client-1.3.4.jar:?] 在org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:360)~[mariadb-java-client-1.3.4.jar:?] 在org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:320)~[mariadb-java-client-1.3.4.jar:?] 在org.mariadb.jdbc.MariaDbStatement.executeBatch(MariaDbStatement.java:1236)~[mariadb-java-client-1.3.4.jar:?] 在com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)~[c3p0-0.9.5.1.jar:0.9.5.1] 在org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:127)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:114)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:163)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.jdbc.internal.jdbcoordinatorimpl.executeBatch(jdbcoordinatorimpl.java:226)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:484)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] …还有9个

版本: hibernate 4.3.11.Final,C3P00.9.5.1,mariadb java客户端1.3.4,mysql 5.6.21

编辑:哈!通过在AbstractQueryProtocol中设置断点并在堆栈跟踪的前面检查MasterProtocol中的queriesObj字段,我能够看到完整的查询。我将分析它们,可能错误更有意义,因为现在我看到了所有插入

EDIT2:嗯,当插入在查询数组中时,我觉得它们是正常的。不确定mariadb java client org.mariadb.jdbc.internal.packet.send.SendTextQueryPacket第120行->的这部分是否有错误

                queries.get(0).writeFirstRewritePart(stream);
                int lastPartLength = queries.get(0).writeLastRewritePartLength();
                for (int i = 1; i < queries.size(); i++) {
                    if (pos.checkRewritableLength(queries.get(i).writeToRewritablePartLength(rewriteOffset) + lastPartLength)) {
                        queries.get(i).writeToRewritablePart(stream, rewriteOffset);
                        queryNumberSend++;
                    }
                }
                queries.get(0).writeLastRewritePart(stream);
querys.get(0.WriteFirstRetWritePart(流);
int lastPartLength=querys.get(0.WriteLastTreWritePartLength();
对于(int i=1;i
EDIT3:使用调试信息构建了自己的mariadb客户端,看起来查询是:

在TABLENAME(字段1、字段2、字段3、字段4、字段5、字段6)中插入值(6个值),(字段1、字段2、字段3、字段4、字段5、字段6)值(其他6个值),(字段1、字段2、字段3、字段4、字段5、字段6)值(6个值),依此类推。。 据我所知,正确的形式是
插入TABLENAME(字段1、字段2、字段3、字段4、字段5、字段6)值(6个值),(另一组值),(另一组值)

插入tbl(a、b)值(1,2),(4,5),(7,8),…
--不要重复列名列表。我知道这一点。X插入是由hibernate生成的,当rewriteBatchedStatements=true在连接字符串中时,mariadb jdbc驱动程序应该将X插入合并为您描述的插入,但似乎它没有这样做。抱歉,第三方软件会这样做