diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java index 10c66cdc..45831bd7 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java @@ -44,7 +44,7 @@ public class RelationalMappingContext extends AbstractMappingContext, RelationalPersistentProperty> { private final NamingStrategy namingStrategy; - private final Map aggregatePathCache = new ConcurrentHashMap<>(); + private final Map aggregatePathCache = new ConcurrentHashMap<>(); private boolean forceQuote = true; @@ -115,10 +115,7 @@ public class RelationalMappingContext @Override public RelationalPersistentEntity getPersistentEntity(RelationalPersistentProperty persistentProperty) { - boolean embeddedDelegation = false; - if (persistentProperty instanceof EmbeddedRelationalPersistentProperty) { - embeddedDelegation = true; - } + boolean embeddedDelegation = persistentProperty instanceof EmbeddedRelationalPersistentProperty; RelationalPersistentEntity entity = super.getPersistentEntity(persistentProperty); @@ -203,6 +200,7 @@ public class RelationalMappingContext AggregatePathCacheKey cacheKey = AggregatePathCacheKey.of(type); AggregatePath aggregatePath = aggregatePathCache.get(cacheKey); + if (aggregatePath == null) { aggregatePath = new DefaultAggregatePath(this, type); @@ -212,14 +210,27 @@ public class RelationalMappingContext return aggregatePath; } - private record AggregatePathCacheKey(RelationalPersistentEntity root,@Nullable PersistentPropertyPath path) { + private record AggregatePathCacheKey(RelationalPersistentEntity root, + @Nullable PersistentPropertyPath path) { + + /** + * Create a new AggregatePathCacheKey for a root entity. + * + * @param root the root entity. + * @return + */ static AggregatePathCacheKey of(RelationalPersistentEntity root) { return new AggregatePathCacheKey(root, null); } - static AggregatePathCacheKey of(PersistentPropertyPath path) { - RelationalPersistentEntity root = path.getBaseProperty().getOwner(); - return new AggregatePathCacheKey(root, path); + /** + * Create a new AggregatePathCacheKey for a property path. + * + * @param path + * @return + */ + static AggregatePathCacheKey of(PersistentPropertyPath path) { + return new AggregatePathCacheKey(path.getBaseProperty().getOwner(), path); } } } diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java index ee7e3ce2..b5cd2fd6 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java @@ -17,8 +17,8 @@ package org.springframework.data.relational.core.mapping; import static org.assertj.core.api.Assertions.*; -import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.UUID; import org.junit.jupiter.api.BeforeEach; @@ -32,10 +32,12 @@ import org.springframework.data.relational.core.sql.SqlIdentifier; * Unit tests for {@link RelationalMappingContext}. * * @author Toshiaki Maki + * @author Jens Schauder */ public class RelationalMappingContextUnitTests { + RelationalMappingContext context = new RelationalMappingContext(); - SimpleTypeHolder holder = new SimpleTypeHolder(new HashSet<>(Arrays.asList(UUID.class)), true); + SimpleTypeHolder holder = new SimpleTypeHolder(new HashSet<>(List.of(UUID.class)), true); @BeforeEach void setup() {