diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java index 4ae018541db..52fae0eeccc 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java @@ -171,7 +171,7 @@ public class EclipseLinkJpaDialect extends DefaultJpaDialect { * This is useful to defer the early transaction begin that obtaining a * JDBC Connection implies within an EclipseLink EntityManager. */ - private static class EclipseLinkConnectionHandle implements ConnectionHandle { + private class EclipseLinkConnectionHandle implements ConnectionHandle { private final EntityManager entityManager; @@ -184,7 +184,13 @@ public class EclipseLinkJpaDialect extends DefaultJpaDialect { @Override public Connection getConnection() { if (this.connection == null) { - this.connection = this.entityManager.unwrap(Connection.class); + transactionIsolationLock.lock(); + try { + this.connection = this.entityManager.unwrap(Connection.class); + } + finally { + transactionIsolationLock.unlock(); + } } return this.connection; }