Skip to content

Commit b9d4aeb

Browse files
committed
only merge detached entities
1 parent e4ed733 commit b9d4aeb

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/main/groovy/de/triology/blog/testdataloader/EntityDeleter.groovy

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,17 @@ class EntityDeleter implements EntityCreatedListener {
7575
private prepareNextEntityForDeletion() {
7676
def entity = entities.pop()
7777
try {
78-
return entityManager.merge(entity)
78+
return mergeNextEntityIfNotAttached(entity)
7979
} catch (IllegalArgumentException e) {
8080
LOG.debug("caught IllegalArgumentException when merging entity $entity, assuming it to be already removed", e)
8181
return null
8282
}
8383
}
8484

85-
85+
private mergeNextEntityIfNotAttached(Object entity) {
86+
if(!entityManager.contains(entity)) {
87+
return entityManager.merge(entity)
88+
}
89+
return entity
90+
}
8691
}

src/test/java/de/triology/blog/testdataloader/EntityDeleterTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,10 @@ public void deletesAnEntityOnlyOnce() throws Exception {
8484
}
8585

8686
@Test
87-
public void mergesEntitiesBeforeRemovingThem() throws Exception {
87+
public void mergesDetachedEntitiesBeforeRemovingThem() throws Exception {
8888
Object entity = new Object();
8989
entityDeleter.entityCreated(entity);
90+
when(entityManager.contains(entity)).thenReturn(false);
9091

9192
entityDeleter.deleteAllEntities();
9293

@@ -95,6 +96,19 @@ public void mergesEntitiesBeforeRemovingThem() throws Exception {
9596
inOrder.verify(entityManager).remove(entity);
9697
}
9798

99+
@Test
100+
public void doesNotMergeAttachedEntitiesBeforeRemovingThem() throws Exception {
101+
Object entity = new Object();
102+
entityDeleter.entityCreated(entity);
103+
when(entityManager.contains(entity)).thenReturn(true);
104+
105+
entityDeleter.deleteAllEntities();
106+
107+
InOrder inOrder = inOrder(entityManager);
108+
inOrder.verify(entityManager, never()).merge(entity);
109+
inOrder.verify(entityManager).remove(entity);
110+
}
111+
98112
@Test
99113
public void doesNotDeleteAlreadyRemovedEntities() throws Exception {
100114
Object entity = new Object();

0 commit comments

Comments
 (0)