diff --git a/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java b/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java index 4f2d97518..cad3499d8 100644 --- a/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java +++ b/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java @@ -141,14 +141,15 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager { // Postgresql-specific: 'set transaction' command must be called inside a transaction assertInTransaction(); - EntityManager entityManager = getEntityManager(); + ReadOnlyCheckingEntityManager entityManager = + (ReadOnlyCheckingEntityManager) getEntityManager(); // Isolation is hardcoded to REPEATABLE READ, as specified by parent's Javadoc. entityManager .createNativeQuery("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ") - .executeUpdate(); + .executeUpdateIgnoringReadOnly(); entityManager .createNativeQuery(String.format("SET TRANSACTION SNAPSHOT '%s'", snapshotId)) - .executeUpdate(); + .executeUpdateIgnoringReadOnly(); return this; } diff --git a/core/src/main/java/google/registry/persistence/transaction/ReadOnlyCheckingEntityManager.java b/core/src/main/java/google/registry/persistence/transaction/ReadOnlyCheckingEntityManager.java index 227f99cb3..d2e929bee 100644 --- a/core/src/main/java/google/registry/persistence/transaction/ReadOnlyCheckingEntityManager.java +++ b/core/src/main/java/google/registry/persistence/transaction/ReadOnlyCheckingEntityManager.java @@ -206,7 +206,7 @@ public class ReadOnlyCheckingEntityManager implements EntityManager { } @Override - public Query createNativeQuery(String sqlString) { + public ReadOnlyCheckingQuery createNativeQuery(String sqlString) { return new ReadOnlyCheckingQuery(delegate.createNativeQuery(sqlString)); }