From 92f5f8989bc10f72621737d1bcf1f4bf12b770f3 Mon Sep 17 00:00:00 2001 From: Michael Muller Date: Tue, 1 Jun 2021 14:22:57 -0400 Subject: [PATCH] Detach entities loaded by loadSingleton() (#1184) * Detach entities loaded by loadSingleton() * Reformatted --- .../transaction/JpaTransactionManagerImpl.java | 2 +- .../transaction/JpaTransactionManagerImplTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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));