[CONJ-902] BatchedTooManyRowsAffectedException with Hibernate Created: 2021-10-05  Updated: 2021-12-20  Resolved: 2021-12-20

Status: Closed
Project: MariaDB Connector/J
Component/s: batch
Affects Version/s: 3.0.2-rc
Fix Version/s: 3.0.3

Type: Bug Priority: Major
Reporter: Sebastian Stamm Assignee: Diego Dupin
Resolution: Fixed Votes: 0
Labels: None


 Description   

Switched from 2.7.3 to 3.0.2rc and get the following Error:
By searching for this, I've stumbled over https://hibernate.atlassian.net/browse/HHH-9134
which points to http://bugs.mysql.com/bug.php?id=61213 (so JDBC related).

Had the behavior from the Connector/J changed (unintentionally)?

org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 2; expected: 1
	at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:78)
	at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:54)
	at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.checkRowCounts(BatchingBatch.java:151)
	at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:126)
	at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:106)
	at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:148)
	at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:198)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:633)
	at org.hibernate.engine.spi.ActionQueue.executeInserts(ActionQueue.java:461)
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:258)
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317)
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:330)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:123)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:194)
	at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:179)
	at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:75)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
	at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:665)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:658)
	at org.hibernate.internal.SessionImpl.save(SessionImpl.java:653)
	at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:351)
	at com.sun.proxy.$Proxy55.save(Unknown Source)



 Comments   
Comment by Diego Dupin [ 2021-10-22 ]

Could you indicate some additional information, like :

  • server type (mariadb/mysql) and version
  • hibernate version
  • any hint of what the batch was (insert / update / delete ? )

I fail to reproduced / see what can cause this regression for now. Any information might help.

Comment by Sebastian Stamm [ 2021-10-22 ]

Running MariaDB 10.6.4 (on Oracle Linux 8.4)
Using Hibernate 5.6.0.CR1, currently with Connector/J 2.7.4 without any problems. Only when I switch to 3.0.0 I get those errors.
Performing mostly (batch) inserts and some updates.

Comment by Diego Dupin [ 2021-10-22 ]

thanks for those informations. Have you the connection string used as well ?

Comment by Sebastian Stamm [ 2021-10-25 ]

The connection-String has nothing special (plain jdbc:mariadb://......")
But maybe the hibernate-settings matters:

        builder.applySetting(AvailableSettings.URL, settings.toURL(0, false));
        builder.applySetting(AvailableSettings.DRIVER, "org.mariadb.jdbc.Driver");
        builder.applySetting("hibernate.dialect", "org.hibernate.dialect.MariaDB106Dialect");
        builder.applySetting("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider");
        builder.applySetting("hibernate.current_session_context_class", "thread");
        builder.applySetting("hibernate.connection.isolation", "2");
        builder.applySetting("hibernate.connection.poolName", "Hibernate-MariaDB-" + settings.getDatabase());
        builder.applySetting("hibernate.jdbc.batch_size", "500");
        builder.applySetting("hibernate.order_inserts", "true");
        builder.applySetting("hibernate.jdbc.batch_versioned_data", "true");
        builder.applySetting("hibernate.id.new_generator_mappings", "true");
        builder.applySetting("javax.persistence.lock.timeout", "5000");

Comment by Diego Dupin [ 2021-10-29 ]

I've not been able to reproduced the problem, but i think this commit solve the issue.

Could you give a try with 3.0.3-SNAPSHOT ? (available only if setting snapshots repository) :

<repositories>
    <repository>
        <id>sonatype-nexus-snapshots</id>
        <name>Sonatype Nexus Snapshots</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>
 
<dependencies>
  <dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>3.0.3-SNAPSHOT</version>
  </dependency>
</dependencies>

Comment by Diego Dupin [ 2021-11-08 ]

sstamm any news of testing 3.0.3-SNAPSHOT ?

Comment by Sebastian Stamm [ 2021-11-08 ]

Yes, did run a test for an hour (appr. 100.000 Transactions and 10.000.000 inserts) until now the error did not show up, so I'd assume it's fixed, thanks!

Generated at Thu Feb 08 03:19:09 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.