From 61d991004830f17a447408815daf16c3883e1985 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 2 Jun 2017 16:10:29 +0200 Subject: [PATCH] DATACASS-456 - Polishing. Switch instance methods to static methods where possible. Reduce method visibility in CassandraMappingContext and CassandraSimpleTypeHolder. Reorder methods in MappingCassandraConverter. Remove unused CassandraPersistentProperty.isIndexed/getOwner methods and PropertyToFieldNameConverter type. Remove CassandraPersistentEntity.getApplicationContext() and inject application context to BasicCassandraPersistentProperty from CassandraMappingContext. --- .../convert/CassandraCustomConversions.java | 2 +- .../convert/MappingCassandraConverter.java | 46 ++++++----- .../BasicCassandraPersistentEntity.java | 34 +++----- .../BasicCassandraPersistentProperty.java | 79 ++++++++---------- .../core/mapping/CassandraMappingContext.java | 33 +++++--- .../mapping/CassandraPersistentEntity.java | 4 - .../mapping/CassandraPersistentProperty.java | 21 +---- .../mapping/CassandraSimpleTypeHolder.java | 36 +++------ .../CassandraUserTypePersistentEntity.java | 6 +- ...cCassandraPersistentPropertyUnitTests.java | 2 +- ...CassandraCompositePrimaryKeyUnitTests.java | 80 +++++++++---------- .../mapping/CompoundPrimaryKeyUnitTests.java | 2 +- 12 files changed, 149 insertions(+), 196 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraCustomConversions.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraCustomConversions.java index 87596cc3f..18b51f3d3 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraCustomConversions.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraCustomConversions.java @@ -46,7 +46,7 @@ public class CassandraCustomConversions extends org.springframework.data.convert converters.addAll(CassandraThreeTenBackPortConverters.getConvertersToRegister()); STORE_CONVERTERS = Collections.unmodifiableList(converters); - STORE_CONVERSIONS = StoreConversions.of(new CassandraSimpleTypeHolder(), STORE_CONVERTERS); + STORE_CONVERSIONS = StoreConversions.of(CassandraSimpleTypeHolder.HOLDER, STORE_CONVERTERS); } /** diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/MappingCassandraConverter.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/MappingCassandraConverter.java index 5f8a41fb6..e66bfab00 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/MappingCassandraConverter.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/MappingCassandraConverter.java @@ -122,6 +122,22 @@ public class MappingCassandraConverter extends AbstractCassandraConverter this.spELContext = new SpELContext(this.spELContext, applicationContext); } + /* (non-Javadoc) + * @see org.springframework.beans.factory.BeanClassLoaderAware#setBeanClassLoader(java.lang.ClassLoader) + */ + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.beanClassLoader = classLoader; + } + + /* (non-Javadoc) + * @see org.springframework.data.cassandra.core.convert.CassandraConverter#getMappingContext() + */ + @Override + public CassandraMappingContext getMappingContext() { + return mappingContext; + } + @SuppressWarnings("unchecked") public R readRow(Class type, Row row) { @@ -291,6 +307,15 @@ public class MappingCassandraConverter extends AbstractCassandraConverter } } + @SuppressWarnings("unchecked") + private Class transformClassToBeanClassLoaderClass(Class entity) { + try { + return (Class) ClassUtils.forName(entity.getName(), beanClassLoader); + } catch (ClassNotFoundException | LinkageError e) { + return entity; + } + } + @Override @SuppressWarnings("unchecked") public void write(Object source, Object sink, CassandraPersistentEntity entity) { @@ -591,25 +616,6 @@ public class MappingCassandraConverter extends AbstractCassandraConverter return id; } - @SuppressWarnings("unchecked") - protected Class transformClassToBeanClassLoaderClass(Class entity) { - try { - return (Class) ClassUtils.forName(entity.getName(), beanClassLoader); - } catch (ClassNotFoundException | LinkageError e) { - return entity; - } - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; - } - - @Override - public CassandraMappingContext getMappingContext() { - return mappingContext; - } - /** * Create a new {@link ConvertingPropertyAccessor} for the given source and entity. * @@ -807,7 +813,7 @@ public class MappingCassandraConverter extends AbstractCassandraConverter return getConversionService().convert(value, target); } - private Class getCollectionType(TypeInformation type) { + private static Class getCollectionType(TypeInformation type) { if (type.getType().isInterface()) { return type.getType(); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java index 5cddeb150..bdd32a32f 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java @@ -98,6 +98,19 @@ public class BasicCassandraPersistentEntity extends BasicPersistentEntity extends BasicPersistentEntity extends BasicPersistentEntity owner, - CassandraSimpleTypeHolder simpleTypeHolder) { - + SimpleTypeHolder simpleTypeHolder) { this(property, owner, simpleTypeHolder, null); } @@ -100,10 +99,6 @@ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentP super(property, owner, simpleTypeHolder); this.userTypeResolver = userTypeResolver; - - if (owner.getApplicationContext() != null) { - setApplicationContext(owner.getApplicationContext()); - } } /* (non-Javadoc) @@ -247,12 +242,38 @@ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentP return userType; } - /* (non-Javadoc) - * @see org.springframework.data.cassandra.mapping.CassandraPersistentProperty#isIndexed() - */ - @Override - public boolean isIndexed() { - return isAnnotationPresent(Indexed.class); + private DataType getDataTypeFor(DataType.Name dataTypeName) { + + DataType dataType = CassandraSimpleTypeHolder.getDataTypeFor(dataTypeName); + + if (dataType == null) { + throw new InvalidDataAccessApiUsageException(String.format( + "Only primitive types are allowed inside Collections for property [%1$s] of type [%2$s] in entity [%3$s]", + getName(), getType(), getOwner().getName())); + } + + return dataType; + } + + private DataType getDataTypeFor(Class javaType) { + + DataType dataType = CassandraSimpleTypeHolder.getDataTypeFor(javaType); + + if (dataType == null) { + throw new InvalidDataAccessApiUsageException(String.format( + "Only primitive types are allowed inside Collections for property [%1$s] of type ['%2$s'] in entity [%3$s]", + getName(), getType(), getOwner().getName())); + } + + return dataType; + } + + private void ensureTypeArguments(int args, int expected) { + if (args != expected) { + throw new InvalidDataAccessApiUsageException( + String.format("Expected [%1$s] typed arguments for property ['%2$s'] of type ['%3$s'] in entity [%4$s]", + expected, getName(), getType(), getOwner().getName())); + } } /* (non-Javadoc) @@ -291,40 +312,6 @@ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentP .filter(primaryKeyColumn -> PrimaryKeyType.CLUSTERED.equals(primaryKeyColumn.type())).isPresent(); } - protected DataType getDataTypeFor(DataType.Name dataTypeName) { - - DataType dataType = CassandraSimpleTypeHolder.getDataTypeFor(dataTypeName); - - if (dataType == null) { - throw new InvalidDataAccessApiUsageException(String.format( - "Only primitive types are allowed inside Collections for property [%1$s] of type [%2$s] in entity [%3$s]", - getName(), getType(), getOwner().getName())); - } - - return dataType; - } - - protected DataType getDataTypeFor(Class javaType) { - - DataType dataType = CassandraSimpleTypeHolder.getDataTypeFor(javaType); - - if (dataType == null) { - throw new InvalidDataAccessApiUsageException(String.format( - "Only primitive types are allowed inside Collections for property [%1$s] of type ['%2$s'] in entity [%3$s]", - getName(), getType(), getOwner().getName())); - } - - return dataType; - } - - protected void ensureTypeArguments(int args, int expected) { - if (args != expected) { - throw new InvalidDataAccessApiUsageException( - String.format("Expected [%1$s] typed arguments for property ['%2$s'] of type ['%3$s'] in entity [%4$s]", - expected, getName(), getType(), getOwner().getName())); - } - } - private CqlIdentifier determineColumnName() { if (isCompositePrimaryKey()) { // then the id type has @PrimaryKeyClass diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraMappingContext.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraMappingContext.java index 170745210..831f1a157 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraMappingContext.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraMappingContext.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -103,11 +104,10 @@ public class CassandraMappingContext processMappingOverrides(); } - @SuppressWarnings("all") - protected void processMappingOverrides() { + private void processMappingOverrides() { mapping.getEntityMappings().stream() // - .filter(entityMapping -> entityMapping != null) // + .filter(Objects::nonNull) // .forEach(entityMapping -> { Class entityClass = getEntityClass(entityMapping.getEntityClassName()); @@ -132,12 +132,13 @@ public class CassandraMappingContext } } - protected void processMappingOverrides(CassandraPersistentEntity entity, EntityMapping entityMapping) { + private static void processMappingOverrides(CassandraPersistentEntity entity, EntityMapping entityMapping) { + entityMapping.getPropertyMappings() .forEach((key, propertyMapping) -> processMappingOverride(entity, propertyMapping)); } - protected void processMappingOverride(CassandraPersistentEntity entity, PropertyMapping mapping) { + private static void processMappingOverride(CassandraPersistentEntity entity, PropertyMapping mapping) { CassandraPersistentProperty property = entity.getRequiredPersistentProperty(mapping.getPropertyName()); @@ -178,6 +179,11 @@ public class CassandraMappingContext this.customConversions = customConversions; } + /** + * Sets the {@link Mapping}. + * + * @param mapping must not be {@literal null}. + */ public void setMapping(Mapping mapping) { Assert.notNull(mapping, "Mapping must not be null"); @@ -208,7 +214,6 @@ public class CassandraMappingContext /** * @return Returns the verifier. */ - @SuppressWarnings("unused") public CassandraPersistentEntityMetadataVerifier getVerifier() { return verifier; } @@ -296,12 +301,20 @@ public class CassandraMappingContext } /* (non-Javadoc) - * @see org.springframework.data.mapping.context.AbstractMappingContext#createPersistentProperty(java.lang.reflect.Field, java.beans.PropertyDescriptor, org.springframework.data.mapping.model.MutablePersistentEntity, org.springframework.data.mapping.model.SimpleTypeHolder) + * @see org.springframework.data.mapping.context.AbstractMappingContext#createPersistentProperty(org.springframework.data.mapping.model.Property, org.springframework.data.mapping.model.MutablePersistentEntity, org.springframework.data.mapping.model.SimpleTypeHolder) */ @Override protected CassandraPersistentProperty createPersistentProperty(Property property, BasicCassandraPersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { - return new BasicCassandraPersistentProperty(property, owner, simpleTypeHolder, userTypeResolver); + + BasicCassandraPersistentProperty cassandraProperty = new BasicCassandraPersistentProperty(property, owner, + simpleTypeHolder, userTypeResolver); + + if (context != null) { + cassandraProperty.setApplicationContext(context); + } + + return cassandraProperty; } /** @@ -331,7 +344,7 @@ public class CassandraMappingContext return hasMappedUserType(name) || hasReferencedUserType(name); } - private boolean hasReferencedUserType(final CqlIdentifier identifier) { + private boolean hasReferencedUserType(CqlIdentifier identifier) { return getPersistentEntities().stream() // .flatMap(PersistentEntity::getPersistentProperties) // @@ -559,7 +572,7 @@ public class CassandraMappingContext * Return the data type for the {@link CassandraPersistentEntity}. * * @param entity must not be {@literal null}. - * @return + * @return the {@link DataType}. */ abstract DataType getDataType(CassandraPersistentEntity entity); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentEntity.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentEntity.java index 0a6521164..d3a15b75f 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentEntity.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentEntity.java @@ -15,7 +15,6 @@ */ package org.springframework.data.cassandra.core.mapping; -import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.data.cql.core.CqlIdentifier; import org.springframework.data.mapping.PersistentEntity; @@ -69,7 +68,4 @@ public interface CassandraPersistentEntity * @see UserDefinedType */ UserType getUserType(); - - - ApplicationContext getApplicationContext(); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java index 96a92a588..f5fa734b9 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraPersistentProperty.java @@ -18,7 +18,6 @@ package org.springframework.data.cassandra.core.mapping; import java.util.Optional; import org.springframework.context.ApplicationContextAware; -import org.springframework.core.convert.converter.Converter; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.cql.core.CqlIdentifier; import org.springframework.data.cql.core.Ordering; @@ -58,11 +57,6 @@ public interface CassandraPersistentProperty */ DataType getDataType(); - /** - * Whether the property has a secondary index on this column. - */ - boolean isIndexed(); - /** * Whether the property is a composite primary key. */ @@ -86,13 +80,10 @@ public interface CassandraPersistentProperty */ boolean isClusterKeyColumn(); - @Override - CassandraPersistentEntity getOwner(); - /** * Whether to force-quote the column names of this property. * - * @param forceQuote + * @param forceQuote {@literal true} to enforce quoting. * @see CassandraPersistentProperty#getColumnName() */ void setForceQuote(boolean forceQuote); @@ -112,14 +103,4 @@ public interface CassandraPersistentProperty * @return a boolean indicating whether this property type is a {@link java.util.Map}. */ boolean isMapLike(); - - enum PropertyToFieldNameConverter implements Converter { - - INSTANCE; - - @Override - public String convert(CassandraPersistentProperty property) { - return property.getColumnName().toCql(); - } - } } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraSimpleTypeHolder.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraSimpleTypeHolder.java index f1b0a0030..364e00d75 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraSimpleTypeHolder.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraSimpleTypeHolder.java @@ -17,15 +17,12 @@ package org.springframework.data.cassandra.core.mapping; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.mapping.model.SimpleTypeHolder; -import org.springframework.data.util.TypeInformation; import com.datastax.driver.core.CodecRegistry; import com.datastax.driver.core.DataType; @@ -77,6 +74,13 @@ public class CassandraSimpleTypeHolder extends SimpleTypeHolder { public static final SimpleTypeHolder HOLDER = new CassandraSimpleTypeHolder(); + /** + * Create a new {@link CassandraSimpleTypeHolder} instance. + */ + private CassandraSimpleTypeHolder() { + super(CASSANDRA_SIMPLE_TYPES, true); + } + /** * @return the map between {@link Name} and {@link DataType}. */ @@ -136,7 +140,7 @@ public class CassandraSimpleTypeHolder extends SimpleTypeHolder { /** * Returns the {@link DataType} for a {@link DataType.Name}. * - * @param name + * @param name must not be {@literal null}. * @return */ public static DataType getDataTypeFor(DataType.Name name) { @@ -146,7 +150,7 @@ public class CassandraSimpleTypeHolder extends SimpleTypeHolder { /** * Returns the default {@link DataType} for a {@link Class}. * - * @param javaClass + * @param javaClass must not be {@literal null}. * @return */ public static DataType getDataTypeFor(Class javaClass) { @@ -158,26 +162,4 @@ public class CassandraSimpleTypeHolder extends SimpleTypeHolder { return classToDataType.get(javaClass); } - public static DataType.Name[] getDataTypeNamesFrom(List> arguments) { - - DataType.Name[] array = new DataType.Name[arguments.size()]; - - for (int i = 0; i != array.length; i++) { - TypeInformation typeInfo = arguments.get(i); - DataType dataType = getDataTypeFor(typeInfo.getType()); - - if (dataType == null) { - throw new InvalidDataAccessApiUsageException( - String.format("Did not find appropriate primitive DataType for type '%s'", typeInfo.getType())); - } - - array[i] = dataType.getName(); - } - - return array; - } - - public CassandraSimpleTypeHolder() { - super(CASSANDRA_SIMPLE_TYPES, true); - } } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraUserTypePersistentEntity.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraUserTypePersistentEntity.java index f9fb98d0b..d8f43f76c 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraUserTypePersistentEntity.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/CassandraUserTypePersistentEntity.java @@ -15,8 +15,6 @@ */ package org.springframework.data.cassandra.core.mapping; -import java.util.Optional; - import org.springframework.data.cql.core.CqlIdentifier; import org.springframework.data.mapping.model.MappingException; import org.springframework.data.util.TypeInformation; @@ -63,8 +61,8 @@ public class CassandraUserTypePersistentEntity extends BasicCassandraPersiste @Override protected CqlIdentifier determineTableName() { - Optional typeAnnotation = findAnnotation(UserDefinedType.class); - return typeAnnotation.map(userDefinedType -> determineName(userDefinedType.value(), userDefinedType.forceQuote())) + return findAnnotation(UserDefinedType.class) // + .map(userDefinedType -> determineName(userDefinedType.value(), userDefinedType.forceQuote())) // .orElseGet(super::determineDefaultName); } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentPropertyUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentPropertyUnitTests.java index a2b618d62..4c07d6125 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentPropertyUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentPropertyUnitTests.java @@ -99,7 +99,7 @@ public class BasicCassandraPersistentPropertyUnitTests { Field field = ReflectionUtils.findField(type, fieldName); - return new BasicCassandraPersistentProperty(Property.of(field), getEntity(type), new CassandraSimpleTypeHolder()); + return new BasicCassandraPersistentProperty(Property.of(field), getEntity(type), CassandraSimpleTypeHolder.HOLDER); } private BasicCassandraPersistentEntity getEntity(Class type) { diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CassandraCompositePrimaryKeyUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CassandraCompositePrimaryKeyUnitTests.java index e57538773..ebd0bbc82 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CassandraCompositePrimaryKeyUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CassandraCompositePrimaryKeyUnitTests.java @@ -43,7 +43,45 @@ import com.datastax.driver.core.DataType; */ public class CassandraCompositePrimaryKeyUnitTests { - private static final CassandraSimpleTypeHolder SIMPLE_TYPE_HOLDER = new CassandraSimpleTypeHolder(); + CassandraMappingContext context; + + CassandraPersistentEntity entity; + + CassandraPersistentEntity key; + + @Before + public void setup() { + + context = new CassandraMappingContext(); + entity = context.getRequiredPersistentEntity(ClassTypeInformation.from(TypeWithCompositeKey.class)); + key = context.getRequiredPersistentEntity(ClassTypeInformation.from(CompositeKey.class)); + } + + @Test + public void validateMappingInfo() { + + Field field = ReflectionUtils.findField(TypeWithCompositeKey.class, "id"); + CassandraPersistentProperty property = new BasicCassandraPersistentProperty(Property.of(field), entity, + CassandraSimpleTypeHolder.HOLDER); + assertThat(property.isIdProperty()).isTrue(); + assertThat(property.isCompositePrimaryKey()).isTrue(); + + CreateTableSpecification spec = context.getCreateTableSpecificationFor(entity); + + List partitionKeyColumns = spec.getPartitionKeyColumns(); + assertThat(partitionKeyColumns).hasSize(1); + ColumnSpecification partitionKeyColumn = partitionKeyColumns.get(0); + assertThat(partitionKeyColumn.getName().toCql()).isEqualTo("z"); + assertThat(partitionKeyColumn.getKeyType()).isEqualTo(PrimaryKeyType.PARTITIONED); + assertThat(partitionKeyColumn.getType()).isEqualTo(DataType.text()); + + List clusteredKeyColumns = spec.getClusteredKeyColumns(); + assertThat(clusteredKeyColumns).hasSize(1); + ColumnSpecification clusteredKeyColumn = clusteredKeyColumns.get(0); + assertThat(clusteredKeyColumn.getName().toCql()).isEqualTo("a"); + assertThat(clusteredKeyColumn.getKeyType()).isEqualTo(PrimaryKeyType.CLUSTERED); + assertThat(partitionKeyColumn.getType()).isEqualTo(DataType.text()); + } @PrimaryKeyClass @EqualsAndHashCode @@ -65,44 +103,4 @@ public class CassandraCompositePrimaryKeyUnitTests { @Column("message") String text; } - - CassandraMappingContext context; - - CassandraPersistentEntity entity; - - CassandraPersistentEntity key; - - @Before - public void setup() { - - context = new CassandraMappingContext(); - entity = context.getRequiredPersistentEntity(ClassTypeInformation.from(TypeWithCompositeKey.class)); - key = context.getRequiredPersistentEntity(ClassTypeInformation.from(CompositeKey.class)); - } - - @Test - public void validateMappingInfo() { - - Field field = ReflectionUtils.findField(TypeWithCompositeKey.class, "id"); - CassandraPersistentProperty property = new BasicCassandraPersistentProperty(Property.of(field), entity, - SIMPLE_TYPE_HOLDER); - assertThat(property.isIdProperty()).isTrue(); - assertThat(property.isCompositePrimaryKey()).isTrue(); - - CreateTableSpecification spec = context.getCreateTableSpecificationFor(entity); - - List partitionKeyColumns = spec.getPartitionKeyColumns(); - assertThat(partitionKeyColumns).hasSize(1); - ColumnSpecification partitionKeyColumn = partitionKeyColumns.get(0); - assertThat(partitionKeyColumn.getName().toCql()).isEqualTo("z"); - assertThat(partitionKeyColumn.getKeyType()).isEqualTo(PrimaryKeyType.PARTITIONED); - assertThat(partitionKeyColumn.getType()).isEqualTo(DataType.text()); - - List clusteredKeyColumns = spec.getClusteredKeyColumns(); - assertThat(clusteredKeyColumns).hasSize(1); - ColumnSpecification clusteredKeyColumn = clusteredKeyColumns.get(0); - assertThat(clusteredKeyColumn.getName().toCql()).isEqualTo("a"); - assertThat(clusteredKeyColumn.getKeyType()).isEqualTo(PrimaryKeyType.CLUSTERED); - assertThat(partitionKeyColumn.getType()).isEqualTo(DataType.text()); - } } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CompoundPrimaryKeyUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CompoundPrimaryKeyUnitTests.java index 70cc86c12..8d2b13318 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CompoundPrimaryKeyUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/CompoundPrimaryKeyUnitTests.java @@ -69,6 +69,6 @@ public class CompoundPrimaryKeyUnitTests { } private CassandraPersistentProperty getPropertyFor(Property property) { - return new BasicCassandraPersistentProperty(property, entity, new CassandraSimpleTypeHolder()); + return new BasicCassandraPersistentProperty(property, entity, CassandraSimpleTypeHolder.HOLDER); } }