Browse Source

Offer a proper replacement for NamingStrategy.INSTANCE.

Closes #1350
pull/1355/head
Jens Schauder 3 years ago
parent
commit
6bdc7db24b
  1. 5
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java
  2. 3
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateUnitTests.java
  3. 3
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java
  4. 5
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/DefaultNamingStrategyUnitTests.java
  5. 3
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java
  6. 6
      spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java
  7. 13
      spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java
  8. 7
      spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java
  9. 4
      spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategyUnitTests.java

5
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; @@ -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 { @@ -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 { @@ -110,7 +111,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware {
public JdbcMappingContext jdbcMappingContext(Optional<NamingStrategy> 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);

3
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; @@ -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 { @@ -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);

3
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/EntityRowMapperUnitTests.java

@ -54,6 +54,7 @@ import org.springframework.data.annotation.Transient; @@ -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 { @@ -847,7 +848,7 @@ public class EntityRowMapperUnitTests {
}
private <T> EntityRowMapper<T> createRowMapper(Class<T> type) {
return createRowMapper(type, NamingStrategy.INSTANCE);
return createRowMapper(type, DefaultNamingStrategy.INSTANCE);
}
@SuppressWarnings("unchecked")

5
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/NamingStrategyUnitTests.java → spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mapping/model/DefaultNamingStrategyUnitTests.java

@ -26,6 +26,7 @@ import org.junit.jupiter.api.Test; @@ -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 @@ -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);

3
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; @@ -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 { @@ -114,7 +115,7 @@ public class TestConfiguration {
@Bean
JdbcMappingContext jdbcMappingContext(Optional<NamingStrategy> 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;
}

6
spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/AbstractR2dbcConfiguration.java

@ -44,6 +44,7 @@ import org.springframework.data.r2dbc.dialect.R2dbcDialect; @@ -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; @@ -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 @@ -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 @@ -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);

13
spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/DefaultNamingStrategy.java

@ -25,6 +25,19 @@ import org.springframework.util.Assert; @@ -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.
* <p>
* 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) {

7
spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/NamingStrategy.java

@ -41,12 +41,7 @@ public interface NamingStrategy { @@ -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.

4
spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/NamingStrategyUnitTests.java → 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 @@ -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);
Loading…
Cancel
Save