Spring+JPA with MySQL/Oracle configurations

2 min read >

Spring+JPA with MySQL/Oracle configurations

Engineering Insights & Web Platforms

During development for a solution based on Spring+JPA+MySQL/Oracle, we came across two settings to watch for.

1. Database isolation level

The default isolation level in MySQL is REPEATABLE READ, different from the default in Oracle (READ_COMMITTED). It seems this is kept for historical reasons related to the replication. Still, the effect is that for example, a database query will return the same result, no matter if some other transaction has meanwhile changed the database.

For checking the current MySQL isolation level: SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

For changing the isolation level add: “transaction-isolation = REPEATABLE-READ” to your MySQL configuration.

2. JPA transaction configuration

For those accustomed to Hibernate default configuration, the default JpaTransactionManager comes with a different default for behavior related to transaction configuration. The “globalRollbackOnParticipationFailure” is set to true, which means a failed transaction will trigger a global rollback. If you want to change that and be the decision-maker if the global transaction should be rolled back or not, set globalRollbackOnParticipationFailure to false.