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.
This commit is contained in:
Mark Paluch
2020-01-31 10:32:36 +01:00
parent b29a789846
commit f1d2d78dc8
4 changed files with 56 additions and 21 deletions

View File

@@ -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<?, RelationalPersistentProperty> 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<?, RelationalPersistentProperty> owner,
SimpleTypeHolder simpleTypeHolder, NamingStrategy namingStrategy) {
super(property, owner, simpleTypeHolder, namingStrategy);
}
@Override
public boolean isReference() {
return AggregateReference.class.isAssignableFrom(getRawType());

View File

@@ -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

View File

@@ -41,30 +41,46 @@ import org.springframework.util.StringUtils;
public class BasicRelationalPersistentProperty extends AnnotationBasedPersistentProperty<RelationalPersistentProperty>
implements RelationalPersistentProperty {
private final RelationalMappingContext context;
private final Lazy<SqlIdentifier> columnName;
private final Lazy<Optional<SqlIdentifier>> collectionIdColumnName;
private final Lazy<SqlIdentifier> collectionKeyColumnName;
private final Lazy<Boolean> isEmbedded;
private final Lazy<String> 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<?, RelationalPersistentProperty> 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<?, RelationalPersistentProperty> 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()
*/

View File

@@ -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;