1
- package org .springframework .data .cassandra .config ;
1
+ package org .springframework .data .cassandra .core . convert ;
2
2
3
3
import java .util .Collection ;
4
4
import java .util .LinkedList ;
12
12
import org .springframework .data .cassandra .CassandraKeyspaceDoesNotExistsException ;
13
13
import org .springframework .data .cassandra .CassandraNoActiveKeyspaceSetForCqlSessionException ;
14
14
import org .springframework .data .cassandra .CassandraSchemaValidationException ;
15
+ import org .springframework .data .cassandra .config .CassandraSchemaValidationProfile ;
15
16
import org .springframework .data .cassandra .core .mapping .BasicCassandraPersistentEntity ;
16
17
import org .springframework .data .cassandra .core .mapping .CassandraMappingContext ;
17
18
import org .springframework .data .cassandra .core .mapping .CassandraPersistentEntity ;
@@ -36,20 +37,28 @@ public class CassandraSchemaValidator implements SmartInitializingSingleton {
36
37
37
38
private static final Log logger = LogFactory .getLog (CassandraSchemaValidator .class );
38
39
39
- private final CqlSessionFactoryBean cqlSessionFactoryBean ;
40
+ private final CqlSession cqlSession ;
40
41
41
42
private final CassandraMappingContext cassandraMappingContext ;
42
43
44
+ private final ColumnTypeResolver columnTypeResolver ;
45
+
43
46
private final boolean strictValidation ;
44
47
45
48
public CassandraSchemaValidator (
46
- CqlSessionFactoryBean cqlSessionFactoryBean ,
47
- CassandraMappingContext cassandraMappingContext ,
49
+ CqlSession cqlSession ,
50
+ CassandraConverter cassandraConverter ,
48
51
boolean strictValidation
49
52
) {
50
53
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
+ );
53
62
}
54
63
55
64
/**
@@ -60,13 +69,11 @@ public CassandraSchemaValidator(
60
69
*/
61
70
@ Override
62
71
public void afterSingletonsInstantiated () {
63
- CqlSession session = cqlSessionFactoryBean .getSession ();
64
-
65
- CqlIdentifier activeKeyspace = session
72
+ CqlIdentifier activeKeyspace = cqlSession
66
73
.getKeyspace ()
67
74
.orElseThrow (CassandraNoActiveKeyspaceSetForCqlSessionException ::new );
68
75
69
- KeyspaceMetadata keyspaceMetadata = session
76
+ KeyspaceMetadata keyspaceMetadata = cqlSession
70
77
.getMetadata ()
71
78
.getKeyspace (activeKeyspace )
72
79
.orElseThrow (() -> new CassandraKeyspaceDoesNotExistsException (activeKeyspace .asInternal ()));
@@ -131,6 +138,11 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
131
138
List <String > validationErrors = new LinkedList <>();
132
139
133
140
entity .doWithProperties ((PropertyHandler <CassandraPersistentProperty >) persistentProperty -> {
141
+
142
+ if (persistentProperty .isTransient ()) {
143
+ return ;
144
+ }
145
+
134
146
CqlIdentifier expectedColumnName = persistentProperty .getColumnName ();
135
147
136
148
Assert .notNull (expectedColumnName , "Column cannot not be null at this point" );
@@ -139,7 +151,7 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
139
151
140
152
if (column .isPresent ()) {
141
153
ColumnMetadata columnMetadata = column .get ();
142
- DataType dataTypeExpected = CassandraSimpleTypeHolder . getDataTypeFor (persistentProperty . getRawType () );
154
+ DataType dataTypeExpected = columnTypeResolver . resolve (persistentProperty ). getDataType ( );
143
155
144
156
if (dataTypeExpected == null ) {
145
157
validationErrors .add (
0 commit comments