From f1d2d78dc86aa60f3997d108d99e76370fc06f47 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 31 Jan 2020 10:32:36 +0100 Subject: [PATCH] DATAJDBC-464 - No longer require MappingContext to create BasicRelationalPersistentProperty. We now no longer require MappingContext to create BasicRelationalPersistentProperty and BasicJdbcPersistentProperty. We require only the NamingStrategy so we're just passing that one instead of the entire context. Original pull request: #186. --- .../mapping/BasicJdbcPersistentProperty.java | 21 +++++++- .../jdbc/core/mapping/JdbcMappingContext.java | 2 +- .../BasicRelationalPersistentProperty.java | 52 ++++++++++++------- .../mapping/RelationalMappingContext.java | 2 +- 4 files changed, 56 insertions(+), 21 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/BasicJdbcPersistentProperty.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/BasicJdbcPersistentProperty.java index 8d2b0c68..81ba0007 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/BasicJdbcPersistentProperty.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/BasicJdbcPersistentProperty.java @@ -15,15 +15,17 @@ */ package org.springframework.data.jdbc.core.mapping; -import org.springframework.data.jdbc.support.JdbcUtil; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.relational.core.mapping.BasicRelationalPersistentProperty; +import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; /** + * Extension to {@link BasicRelationalPersistentProperty}. + * * @author Mark Paluch */ public class BasicJdbcPersistentProperty extends BasicRelationalPersistentProperty { @@ -35,12 +37,29 @@ public class BasicJdbcPersistentProperty extends BasicRelationalPersistentProper * @param owner must not be {@literal null}. * @param simpleTypeHolder must not be {@literal null}. * @param context must not be {@literal null} + * @deprecated since 2.0, use + * {@link #BasicJdbcPersistentProperty(Property, PersistentEntity, SimpleTypeHolder, NamingStrategy)}. */ + @Deprecated public BasicJdbcPersistentProperty(Property property, PersistentEntity owner, SimpleTypeHolder simpleTypeHolder, RelationalMappingContext context) { super(property, owner, simpleTypeHolder, context); } + /** + * Creates a new {@link BasicJdbcPersistentProperty}. + * + * @param property must not be {@literal null}. + * @param owner must not be {@literal null}. + * @param simpleTypeHolder must not be {@literal null}. + * @param namingStrategy must not be {@literal null} + * @since 2.0 + */ + public BasicJdbcPersistentProperty(Property property, PersistentEntity owner, + SimpleTypeHolder simpleTypeHolder, NamingStrategy namingStrategy) { + super(property, owner, simpleTypeHolder, namingStrategy); + } + @Override public boolean isReference() { return AggregateReference.class.isAssignableFrom(getRawType()); diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java index 98bd8a89..85861d28 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcMappingContext.java @@ -85,7 +85,7 @@ public class JdbcMappingContext extends RelationalMappingContext { @Override protected RelationalPersistentProperty createPersistentProperty(Property property, RelationalPersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { - return new BasicJdbcPersistentProperty(property, owner, simpleTypeHolder, this); + return new BasicJdbcPersistentProperty(property, owner, simpleTypeHolder, this.getNamingStrategy()); } @Override diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java index 39b1612f..a77286e1 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentProperty.java @@ -41,30 +41,46 @@ import org.springframework.util.StringUtils; public class BasicRelationalPersistentProperty extends AnnotationBasedPersistentProperty implements RelationalPersistentProperty { - private final RelationalMappingContext context; private final Lazy columnName; private final Lazy> collectionIdColumnName; private final Lazy collectionKeyColumnName; private final Lazy isEmbedded; private final Lazy embeddedPrefix; + private final NamingStrategy namingStrategy; private boolean forceQuote = true; /** - * Creates a new {@link AnnotationBasedPersistentProperty}. + * Creates a new {@link BasicRelationalPersistentProperty}. * * @param property must not be {@literal null}. * @param owner must not be {@literal null}. * @param simpleTypeHolder must not be {@literal null}. * @param context must not be {@literal null} + * @since 2.0, use + * {@link #BasicRelationalPersistentProperty(Property, PersistentEntity, SimpleTypeHolder, NamingStrategy)}. */ + @Deprecated public BasicRelationalPersistentProperty(Property property, PersistentEntity owner, SimpleTypeHolder simpleTypeHolder, RelationalMappingContext context) { + this(property, owner, simpleTypeHolder, context.getNamingStrategy()); + } + + /** + * Creates a new {@link BasicRelationalPersistentProperty}. + * + * @param property must not be {@literal null}. + * @param owner must not be {@literal null}. + * @param simpleTypeHolder must not be {@literal null}. + * @param namingStrategy must not be {@literal null} + * @since 2.0 + */ + public BasicRelationalPersistentProperty(Property property, PersistentEntity owner, + SimpleTypeHolder simpleTypeHolder, NamingStrategy namingStrategy) { super(property, owner, simpleTypeHolder); + this.namingStrategy = namingStrategy; - Assert.notNull(context, "context must not be null."); - - this.context = context; + Assert.notNull(namingStrategy, "NamingStrategy must not be null."); this.isEmbedded = Lazy.of(() -> Optional.ofNullable(findAnnotation(Embedded.class)).isPresent()); @@ -76,7 +92,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent .map(Column::value) // .filter(StringUtils::hasText) // .map(this::createSqlIdentifier) // - .orElseGet(() -> createDerivedSqlIdentifier(context.getNamingStrategy().getColumnName(this)))); + .orElseGet(() -> createDerivedSqlIdentifier(namingStrategy.getColumnName(this)))); this.collectionIdColumnName = Lazy.of(() -> Optionals .toStream(Optional.ofNullable(findAnnotation(MappedCollection.class)) // @@ -92,7 +108,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent Optional.ofNullable(findAnnotation(Column.class)).map(Column::keyColumn)) // .filter(StringUtils::hasText).findFirst() // .map(this::createSqlIdentifier) // - .orElseGet(() -> createDerivedSqlIdentifier(context.getNamingStrategy().getKeyColumn(this)))); + .orElseGet(() -> createDerivedSqlIdentifier(namingStrategy.getKeyColumn(this)))); } private SqlIdentifier createSqlIdentifier(String name) { @@ -139,7 +155,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return columnName.get(); } - /* + /* * (non-Javadoc) * @see org.springframework.data.mapping.model.AbstractPersistentProperty#getOwner() */ @@ -148,17 +164,17 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return (RelationalPersistentEntity) super.getOwner(); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#getReverseColumnName() */ @Override public SqlIdentifier getReverseColumnName() { return collectionIdColumnName.get() - .orElseGet(() -> createDerivedSqlIdentifier(context.getNamingStrategy().getReverseColumnName(this))); + .orElseGet(() -> createDerivedSqlIdentifier(this.namingStrategy.getReverseColumnName(this))); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#getReverseColumnName(org.springframework.data.relational.core.mapping.PersistentPropertyPathExtension) */ @@ -166,10 +182,10 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent public SqlIdentifier getReverseColumnName(PersistentPropertyPathExtension path) { return collectionIdColumnName.get() - .orElseGet(() -> createDerivedSqlIdentifier(context.getNamingStrategy().getReverseColumnName(path))); + .orElseGet(() -> createDerivedSqlIdentifier(this.namingStrategy.getReverseColumnName(path))); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#getKeyColumn() */ @@ -178,7 +194,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return isQualified() ? collectionKeyColumnName.get() : null; } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#isQualified() */ @@ -187,7 +203,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return isMap() || isListLike(); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#getQualifierColumnType() */ @@ -204,7 +220,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return Integer.class; } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#isOrdered() */ @@ -213,7 +229,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return isListLike(); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#isEmbedded() */ @@ -222,7 +238,7 @@ public class BasicRelationalPersistentProperty extends AnnotationBasedPersistent return isEmbedded.get(); } - /* + /* * (non-Javadoc) * @see org.springframework.data.relational.core.mapping.RelationalPersistentProperty#getEmbeddedPrefix() */ 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 56080fd2..74654963 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 @@ -102,7 +102,7 @@ public class RelationalMappingContext RelationalPersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { BasicRelationalPersistentProperty persistentProperty = new BasicRelationalPersistentProperty(property, owner, - simpleTypeHolder, this); + simpleTypeHolder, this.namingStrategy); persistentProperty.setForceQuote(isForceQuote()); return persistentProperty;