1- package org .springframework .data .cassandra .config ;
1+ package org .springframework .data .cassandra .core . convert ;
22
33import java .util .Collection ;
44import java .util .LinkedList ;
1212import org .springframework .data .cassandra .CassandraKeyspaceDoesNotExistsException ;
1313import org .springframework .data .cassandra .CassandraNoActiveKeyspaceSetForCqlSessionException ;
1414import org .springframework .data .cassandra .CassandraSchemaValidationException ;
15+ import org .springframework .data .cassandra .config .CassandraSchemaValidationProfile ;
1516import org .springframework .data .cassandra .core .mapping .BasicCassandraPersistentEntity ;
1617import org .springframework .data .cassandra .core .mapping .CassandraMappingContext ;
1718import org .springframework .data .cassandra .core .mapping .CassandraPersistentEntity ;
@@ -36,20 +37,28 @@ public class CassandraSchemaValidator implements SmartInitializingSingleton {
3637
3738 private static final Log logger = LogFactory .getLog (CassandraSchemaValidator .class );
3839
39- private final CqlSessionFactoryBean cqlSessionFactoryBean ;
40+ private final CqlSession cqlSession ;
4041
4142 private final CassandraMappingContext cassandraMappingContext ;
4243
44+ private final ColumnTypeResolver columnTypeResolver ;
45+
4346 private final boolean strictValidation ;
4447
4548 public CassandraSchemaValidator (
46- CqlSessionFactoryBean cqlSessionFactoryBean ,
47- CassandraMappingContext cassandraMappingContext ,
49+ CqlSession cqlSession ,
50+ CassandraConverter cassandraConverter ,
4851 boolean strictValidation
4952 ) {
5053 this .strictValidation = strictValidation ;
51- this .cqlSessionFactoryBean = cqlSessionFactoryBean ;
52- this .cassandraMappingContext = cassandraMappingContext ;
54+ this .cqlSession = cqlSession ;
55+ this .cassandraMappingContext = cassandraConverter .getMappingContext ();
56+ this .columnTypeResolver = new DefaultColumnTypeResolver (
57+ cassandraMappingContext ,
58+ SchemaFactory .ShallowUserTypeResolver .INSTANCE ,
59+ cassandraConverter ::getCodecRegistry ,
60+ cassandraConverter ::getCustomConversions
61+ );
5362 }
5463
5564 /**
@@ -60,13 +69,11 @@ public CassandraSchemaValidator(
6069 */
6170 @ Override
6271 public void afterSingletonsInstantiated () {
63- CqlSession session = cqlSessionFactoryBean .getSession ();
64-
65- CqlIdentifier activeKeyspace = session
72+ CqlIdentifier activeKeyspace = cqlSession
6673 .getKeyspace ()
6774 .orElseThrow (CassandraNoActiveKeyspaceSetForCqlSessionException ::new );
6875
69- KeyspaceMetadata keyspaceMetadata = session
76+ KeyspaceMetadata keyspaceMetadata = cqlSession
7077 .getMetadata ()
7178 .getKeyspace (activeKeyspace )
7279 .orElseThrow (() -> new CassandraKeyspaceDoesNotExistsException (activeKeyspace .asInternal ()));
@@ -131,6 +138,11 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
131138 List <String > validationErrors = new LinkedList <>();
132139
133140 entity .doWithProperties ((PropertyHandler <CassandraPersistentProperty >) persistentProperty -> {
141+
142+ if (persistentProperty .isTransient ()) {
143+ return ;
144+ }
145+
134146 CqlIdentifier expectedColumnName = persistentProperty .getColumnName ();
135147
136148 Assert .notNull (expectedColumnName , "Column cannot not be null at this point" );
@@ -139,7 +151,7 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
139151
140152 if (column .isPresent ()) {
141153 ColumnMetadata columnMetadata = column .get ();
142- DataType dataTypeExpected = CassandraSimpleTypeHolder . getDataTypeFor (persistentProperty . getRawType () );
154+ DataType dataTypeExpected = columnTypeResolver . resolve (persistentProperty ). getDataType ( );
143155
144156 if (dataTypeExpected == null ) {
145157 validationErrors .add (
0 commit comments