@Override public CreateTableSpecification getCreateTableSpecificationFor( CassandraPersistentEntity<?> entity) { Assert.notNull(entity); final CreateTableSpecification spec = new CreateTableSpecification(); spec.name(entity.getTableName()); entity.doWithProperties( new PropertyHandler<CassandraPersistentProperty>() { @Override public void doWithPersistentProperty(CassandraPersistentProperty prop) { if (prop.isCompositePrimaryKey()) { CassandraPersistentEntity<?> pkEntity = getPersistentEntity(prop.getRawType()); pkEntity.doWithProperties( new PropertyHandler<CassandraPersistentProperty>() { @Override public void doWithPersistentProperty(CassandraPersistentProperty pkProp) { if (pkProp.isPartitionKeyColumn()) { spec.partitionKeyColumn(pkProp.getColumnName(), pkProp.getDataType()); } else { spec.clusteredKeyColumn( pkProp.getColumnName(), pkProp.getDataType(), pkProp.getPrimaryKeyOrdering()); } } }); } else { if (prop.isIdProperty()) { spec.partitionKeyColumn(prop.getColumnName(), prop.getDataType()); } else { spec.column(prop.getColumnName(), prop.getDataType()); } } } }); if (spec.getPartitionKeyColumns().isEmpty()) { throw new MappingException( "no partition key columns found in the entity " + entity.getType()); } return spec; }