diff --git a/src/main/java/org/springframework/data/neo4j/core/mapping/DefaultNeo4jEntityConverter.java b/src/main/java/org/springframework/data/neo4j/core/mapping/DefaultNeo4jEntityConverter.java index 6a29cee80..3ce43521a 100644 --- a/src/main/java/org/springframework/data/neo4j/core/mapping/DefaultNeo4jEntityConverter.java +++ b/src/main/java/org/springframework/data/neo4j/core/mapping/DefaultNeo4jEntityConverter.java @@ -755,7 +755,8 @@ final class DefaultNeo4jEntityConverter implements Neo4jEntityConverter { private final Lock write = lock.writeLock(); private final Map internalIdStore = new HashMap<>(); - private final Map internalNextRecord = new HashMap<>(); + private final Map internalCurrentRecord = new HashMap<>(); + private final Set previousRecords = new HashSet<>(); private final Set idsInCreation = new HashSet<>(); private void storeObject(@Nullable Long internalId, Object object) { @@ -766,7 +767,7 @@ final class DefaultNeo4jEntityConverter implements Neo4jEntityConverter { write.lock(); idsInCreation.remove(internalId); internalIdStore.put(internalId, object); - internalNextRecord.put(internalId, false); + internalCurrentRecord.put(internalId, false); } finally { write.unlock(); } @@ -837,23 +838,19 @@ final class DefaultNeo4jEntityConverter implements Neo4jEntityConverter { read.lock(); - Boolean nextRecord = internalNextRecord.get(internalId); - - if (nextRecord != null) { - return nextRecord; - } + return previousRecords.contains(internalId) || internalCurrentRecord.get(internalId); } finally { read.unlock(); } - return false; } /** * Mark all currently existing objects as mapped. */ private void nextRecord() { - internalNextRecord.replaceAll((x, y) -> true); + previousRecords.addAll(internalCurrentRecord.keySet()); + internalCurrentRecord.clear(); } } }