diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java index 5b7287a9f..e8f05cea2 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java @@ -44,6 +44,7 @@ import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.relational.RelationalManagedTypes; import org.springframework.data.relational.core.conversion.RelationalConverter; import org.springframework.data.relational.core.dialect.Dialect; +import org.springframework.data.relational.core.mapping.DefaultNamingStrategy; import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.Table; import org.springframework.data.util.TypeScanner; @@ -100,7 +101,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware { /** * Register a {@link JdbcMappingContext} and apply an optional {@link NamingStrategy}. * - * @param namingStrategy optional {@link NamingStrategy}. Use {@link NamingStrategy#INSTANCE} as fallback. + * @param namingStrategy optional {@link NamingStrategy}. Use {@link org.springframework.data.relational.core.mapping.DefaultNamingStrategy#INSTANCE} as fallback. * @param customConversions see {@link #jdbcCustomConversions()}. * @param jdbcManagedTypes JDBC managed types, typically discovered through {@link #jdbcManagedTypes() an entity * scan}. @@ -110,7 +111,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware { public JdbcMappingContext jdbcMappingContext(Optional namingStrategy, JdbcCustomConversions customConversions, RelationalManagedTypes jdbcManagedTypes) { - JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(NamingStrategy.INSTANCE)); + JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(DefaultNamingStrategy.INSTANCE)); mappingContext.setSimpleTypeHolder(customConversions.getSimpleTypeHolder()); mappingContext.setManagedTypes(jdbcManagedTypes); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java index 8203f616b..1192b5096 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java @@ -42,7 +42,6 @@ import org.springframework.data.jdbc.core.convert.RelationResolver; import org.springframework.data.mapping.callback.EntityCallbacks; import org.springframework.data.relational.core.conversion.MutableAggregateChange; import org.springframework.data.relational.core.mapping.Column; -import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.relational.core.mapping.event.AfterConvertCallback; import org.springframework.data.relational.core.mapping.event.AfterDeleteCallback; @@ -72,7 +71,7 @@ public class JdbcAggregateTemplateUnitTests { @BeforeEach public void setUp() { - RelationalMappingContext mappingContext = new RelationalMappingContext(NamingStrategy.INSTANCE); + RelationalMappingContext mappingContext = new RelationalMappingContext(); JdbcConverter converter = new BasicJdbcConverter(mappingContext, relationResolver); template = new JdbcAggregateTemplate(eventPublisher, mappingContext, converter, dataAccessStrategy); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java index 89f2b384a..6b725159b 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java @@ -54,6 +54,7 @@ import org.springframework.data.annotation.Transient; import org.springframework.data.jdbc.core.mapping.AggregateReference; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.mapping.PersistentPropertyPath; +import org.springframework.data.relational.core.mapping.DefaultNamingStrategy; import org.springframework.data.relational.core.mapping.Embedded; import org.springframework.data.relational.core.mapping.Embedded.OnEmpty; import org.springframework.data.relational.core.mapping.NamingStrategy; @@ -847,7 +848,7 @@ public class EntityRowMapperUnitTests { } private EntityRowMapper createRowMapper(Class type) { - return createRowMapper(type, NamingStrategy.INSTANCE); + return createRowMapper(type, DefaultNamingStrategy.INSTANCE); } @SuppressWarnings("unchecked") diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/NamingStrategyUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/DefaultNamingStrategyUnitTests.java similarity index 93% rename from spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/NamingStrategyUnitTests.java rename to spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/DefaultNamingStrategyUnitTests.java index 42abc5406..3f0dde3fd 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/NamingStrategyUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/DefaultNamingStrategyUnitTests.java @@ -26,6 +26,7 @@ import org.junit.jupiter.api.Test; import org.springframework.data.annotation.Id; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; +import org.springframework.data.relational.core.mapping.DefaultNamingStrategy; import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalPersistentEntity; @@ -36,9 +37,9 @@ import org.springframework.data.relational.core.mapping.RelationalPersistentEnti * @author Jens Schauder * @author Mark Paluch */ -public class NamingStrategyUnitTests { +public class DefaultNamingStrategyUnitTests { - private final NamingStrategy target = NamingStrategy.INSTANCE; + private final NamingStrategy target = DefaultNamingStrategy.INSTANCE; private final RelationalPersistentEntity persistentEntity = // new JdbcMappingContext(target).getRequiredPersistentEntity(DummyEntity.class); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java index 810c3a8e2..206ae43a3 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java @@ -41,6 +41,7 @@ import org.springframework.data.jdbc.repository.config.DialectResolver; import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactory; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.relational.core.dialect.Dialect; +import org.springframework.data.relational.core.mapping.DefaultNamingStrategy; import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.repository.core.NamedQueries; @@ -114,7 +115,7 @@ public class TestConfiguration { @Bean JdbcMappingContext jdbcMappingContext(Optional namingStrategy, CustomConversions conversions) { - JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(NamingStrategy.INSTANCE)); + JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(DefaultNamingStrategy.INSTANCE)); mappingContext.setSimpleTypeHolder(conversions.getSimpleTypeHolder()); return mappingContext; } diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java index e8e15f48d..fc43d3cea 100644 --- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java +++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java @@ -44,6 +44,7 @@ import org.springframework.data.r2dbc.dialect.R2dbcDialect; import org.springframework.data.r2dbc.mapping.R2dbcMappingContext; import org.springframework.data.relational.RelationalManagedTypes; import org.springframework.data.relational.core.conversion.BasicRelationalConverter; +import org.springframework.data.relational.core.mapping.DefaultNamingStrategy; import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.Table; import org.springframework.data.util.TypeScanner; @@ -57,6 +58,7 @@ import org.springframework.util.StringUtils; * R2DBC to work. * * @author Mark Paluch + * @author Jens Schauder * @see ConnectionFactory * @see DatabaseClient * @see org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories @@ -161,7 +163,7 @@ public abstract class AbstractR2dbcConfiguration implements ApplicationContextAw /** * Register a {@link R2dbcMappingContext} and apply an optional {@link NamingStrategy}. * - * @param namingStrategy optional {@link NamingStrategy}. Use {@link NamingStrategy#INSTANCE} as fallback. + * @param namingStrategy optional {@link NamingStrategy}. Use {@link DefaultNamingStrategy#INSTANCE} as fallback. * @param r2dbcCustomConversions customized R2DBC conversions. * @param r2dbcManagedTypes R2DBC managed types, typically discovered through {@link #r2dbcManagedTypes() an entity * scan}. @@ -174,7 +176,7 @@ public abstract class AbstractR2dbcConfiguration implements ApplicationContextAw Assert.notNull(namingStrategy, "NamingStrategy must not be null"); - R2dbcMappingContext context = new R2dbcMappingContext(namingStrategy.orElse(NamingStrategy.INSTANCE)); + R2dbcMappingContext context = new R2dbcMappingContext(namingStrategy.orElse(DefaultNamingStrategy.INSTANCE)); context.setSimpleTypeHolder(r2dbcCustomConversions.getSimpleTypeHolder()); context.setManagedTypes(r2dbcManagedTypes); diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java index e22cde1d8..c2b1c61d9 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java @@ -25,6 +25,19 @@ import org.springframework.util.Assert; */ public class DefaultNamingStrategy implements NamingStrategy { + /** + * Static immutable instance of the class. It is made immutable by letting + * {@link #setForeignKeyNaming(ForeignKeyNaming)} throw an exception. + *

+ * Using this avoids creating essentially the same class over and over again. + */ + public static NamingStrategy INSTANCE = new DefaultNamingStrategy() { + @Override + public void setForeignKeyNaming(ForeignKeyNaming foreignKeyNaming) { + throw new UnsupportedOperationException("Cannot update immutable DefaultNamingStrategy"); + } + }; + private ForeignKeyNaming foreignKeyNaming = ForeignKeyNaming.APPLY_RENAMING; public void setForeignKeyNaming(ForeignKeyNaming foreignKeyNaming) { diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java index 05b6b227f..89b7039e4 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java @@ -41,12 +41,7 @@ public interface NamingStrategy { * * @deprecated use {@link DefaultNamingStrategy#INSTANCE} instead. */ - @Deprecated(since = "2.4") NamingStrategy INSTANCE = new DefaultNamingStrategy() { - @Override - public void setForeignKeyNaming(ForeignKeyNaming foreignKeyNaming) { - throw new UnsupportedOperationException("Cannot update immutable DefaultNamingStrategy"); - } - }; + @Deprecated(since = "2.4", forRemoval = true) NamingStrategy INSTANCE = DefaultNamingStrategy.INSTANCE; /** * Defaults to no schema. diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/NamingStrategyUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategyUnitTests.java similarity index 95% rename from spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/NamingStrategyUnitTests.java rename to spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategyUnitTests.java index e38c7545e..941f072c0 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/NamingStrategyUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategyUnitTests.java @@ -31,9 +31,9 @@ import org.springframework.data.relational.core.mapping.RelationalPersistentEnti * @author Oliver Gierke * @author Jens Schauder */ -public class NamingStrategyUnitTests { +public class DefaultNamingStrategyUnitTests { - private final NamingStrategy target = NamingStrategy.INSTANCE; + private final NamingStrategy target = DefaultNamingStrategy.INSTANCE; private final RelationalMappingContext context = new RelationalMappingContext(target); private final RelationalPersistentEntity persistentEntity = context.getRequiredPersistentEntity(DummyEntity.class);