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 db6b88516..51bec35a3 100644 --- a/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java +++ b/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java @@ -504,7 +504,7 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager { elements.size() <= 1, "Expected at most one entity of type %s, found at least two", clazz.getSimpleName()); - return elements.stream().findFirst(); + return elements.stream().findFirst().map(this::detach); } private int internalDelete(VKey key) { diff --git a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java index e119e9c70..9530b5601 100644 --- a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java @@ -508,6 +508,19 @@ class JpaTransactionManagerImplTest { assertThat(persisted).containsExactlyElementsIn(moreEntities); } + @Test + void loadSingleton_detaches() { + jpaTm().transact(() -> jpaTm().insert(theEntity)); + jpaTm() + .transact( + () -> + assertThat( + jpaTm() + .getEntityManager() + .contains(jpaTm().loadSingleton(TestEntity.class).get()))) + .isFalse(); + } + @Test void delete_succeeds() { jpaTm().transact(() -> jpaTm().insert(theEntity));