diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentEntity.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentEntity.java index a87e226be..e87149fa1 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentEntity.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentEntity.java @@ -51,7 +51,8 @@ public class BasicCassandraPersistentEntity extends BasicPersistentEntity typeInformation) { this(typeInformation, null); @@ -64,6 +65,18 @@ public class BasicCassandraPersistentEntity extends BasicPersistentEntity typeInformation, CassandraMappingContext mappingContext) { + this(typeInformation, mappingContext, DEFAULT_VERIFIER); + + } + + /** + * Creates a new {@link BasicCassandraPersistentEntity} with the given {@link TypeInformation}. Will default the table + * name to the entity's simple type name. + * + * @param typeInformation + */ + public BasicCassandraPersistentEntity(TypeInformation typeInformation, CassandraMappingContext mappingContext, + CassandraPersistentEntityMetadataVerifier verifier) { super(typeInformation, CassandraPersistentPropertyComparator.IT); @@ -71,6 +84,8 @@ public class BasicCassandraPersistentEntity extends BasicPersistentEntity extends BasicPersistentEntity extends BasicCassandraPersisten super(typeInformation, mappingContext); } + public CachingCassandraPersistentEntity(TypeInformation typeInformation, CassandraMappingContext mappingContext, + CassandraPersistentEntityMetadataVerifier verifier) { + super(typeInformation, mappingContext, verifier); + } + @Override public String getTableName() { if (tableName == null) { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CassandraMappingContext.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CassandraMappingContext.java index 06bf6fe15..7759b1b73 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CassandraMappingContext.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CassandraMappingContext.java @@ -71,4 +71,9 @@ public interface CassandraMappingContext extends * given type. */ boolean contains(Class type); + + /** + * Sets a verifier other than the {@link DefaultCassandraPersistentEntityMetadataVerifier} + */ + void setVerifier(CassandraPersistentEntityMetadataVerifier verifier); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java index ff7747400..981e9f05b 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraMappingContext.java @@ -56,6 +56,7 @@ public class DefaultCassandraMappingContext extends protected ApplicationContext context; protected Mapping mapping = new Mapping(); protected ClassLoader beanClassLoader; + protected CassandraPersistentEntityMetadataVerifier verifier = new DefaultCassandraPersistentEntityMetadataVerifier(); // useful caches protected Map>> entitySetsByTableName = new HashMap>>(); @@ -117,7 +118,7 @@ public class DefaultCassandraMappingContext extends @Override protected CassandraPersistentEntity createPersistentEntity(TypeInformation typeInformation) { - CassandraPersistentEntity entity = new CachingCassandraPersistentEntity(typeInformation, this); + CassandraPersistentEntity entity = new CachingCassandraPersistentEntity(typeInformation, this, verifier); if (context != null) { entity.setApplicationContext(context); @@ -262,4 +263,18 @@ public class DefaultCassandraMappingContext extends public boolean contains(Class type) { return entitiesByType.containsKey(type); } + + /** + * @return Returns the verifier. + */ + public CassandraPersistentEntityMetadataVerifier getVerifier() { + return verifier; + } + + /** + * @param verifier The verifier to set. + */ + public void setVerifier(CassandraPersistentEntityMetadataVerifier verifier) { + this.verifier = verifier; + } } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java index e1d24141d..9bc36d796 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/DefaultCassandraPersistentEntityMetadataVerifier.java @@ -20,6 +20,8 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.cassandra.core.PrimaryKeyType; import org.springframework.data.annotation.Persistent; import org.springframework.data.mapping.PropertyHandler; @@ -34,6 +36,10 @@ import org.springframework.data.mapping.model.MappingException; */ public class DefaultCassandraPersistentEntityMetadataVerifier implements CassandraPersistentEntityMetadataVerifier { + private static final Logger log = LoggerFactory.getLogger(DefaultCassandraPersistentEntityMetadataVerifier.class); + + protected boolean strict = false; + @Override public void verify(CassandraPersistentEntity entity) throws MappingException { @@ -157,8 +163,12 @@ public class DefaultCassandraPersistentEntityMetadataVerifier implements Cassand throw new NoSuchMethodException(); } } catch (NoSuchMethodException e) { - exceptions.add(new MappingException( - "@PrimaryKeyClass must override 'boolean equals(Object)' method and use all @PrimaryKeyColumn fields", e)); + String message = "@PrimaryKeyClass must override 'boolean equals(Object)' method and use all @PrimaryKeyColumn fields"; + if (strict) { + exceptions.add(new MappingException(message, e)); + } else { + log.warn(message); + } } /* @@ -170,8 +180,12 @@ public class DefaultCassandraPersistentEntityMetadataVerifier implements Cassand throw new NoSuchMethodException(); } } catch (NoSuchMethodException e) { - exceptions.add(new MappingException( - "@PrimaryKeyClass must override 'int hashCode()' method and use all @PrimaryKeyColumn fields", e)); + String message = "@PrimaryKeyClass must override 'int hashCode()' method and use all @PrimaryKeyColumn fields"; + if (strict) { + exceptions.add(new MappingException(message, e)); + } else { + log.warn(message); + } } } @@ -209,7 +223,22 @@ public class DefaultCassandraPersistentEntityMetadataVerifier implements Cassand * Determine whether or not to throw Exception based on errors found */ if (exceptions.getCount() > 0) { + log.error("Exceptions while verifying PersistentEntity", exceptions); throw exceptions; } } + + /** + * @return Returns the strict. + */ + public boolean isStrict() { + return strict; + } + + /** + * @param strict The strict to set. + */ + public void setStrict(boolean strict) { + this.strict = strict; + } }