1
votes

I tried to create tables in cassandra db on start-up of spring boot application but it doesn't seem to be able to create tables. Below is my configuration. I have the @EnableCassandraRepositories in my Application class. I already created my keyspace by default. So its just the tables that I'm looking to create.

Configuration

    @Configuration
    public class CassandraConfig extends AbstractCassandraConfiguration {
        @Value("${cassandra.contactpoints}")
        private String contactPoints;
        @Value("${cassandra.port}")
        private int port;
        @Value("${cassandra.keyspace}")
        private String keySpace;
        @Value("${cassandra.basePackages}")
        private String basePackages;
    
        @Autowired
        private Environment environment;
    
        @Override
        protected String getKeyspaceName() {
            return keySpace;
        }
    
        @Override
        @Bean
        public CassandraClusterFactoryBean cluster() {
            final CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
            cluster.setContactPoints(contactPoints);
            cluster.setPort(port);
            return cluster;
        }
    
        @Override
        @Bean
        public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
            return new BasicCassandraMappingContext();
        }
}

Entity

    @Table
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class AssessmentAttemptDetailsEntity implements Serializable {
    
    
        @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED)
        private String assessmentId;
    
        @PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED)
        private String attempid;
    
    }

Application

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.lte.assessmentanalytics.service","com.lte.assessmentanalytics.config", "com.lte.assessmentanalytics.model", "com.lte.assessmentanalytics.listener"})
    @EnableCassandraRepositories("com.lte.assessmentanalytics.model")
    public class AssessmentanalyticsApplication {
    
        @Autowired
        private AssessmentAttemptRepository assessmentAttemptRepository;
    
    
        public static void main(String[] args) {
            SpringApplication.run(AssessmentanalyticsApplication.class, args);
        }
    }

Repository

    @Repository
    public interface AssessmentAttemptRepository extends CassandraRepository<AssessmentAttemptDetailsEntity, Long> {
    }
1

1 Answers

1
votes

I was able to fix this by modifying my CassandraConfig class to.

    @Configuration
    @EnableCassandraRepositories("com.lte.assessmentanalytics.model")
    public class CassandraConfig extends AbstractCassandraConfiguration {
        @Value("${cassandra.contactpoints}")
        private String contactPoints;
        @Value("${cassandra.port}")
        private int port;
        @Value("${cassandra.keyspace}")
        private String keySpace;
        @Value("${cassandra.basePackages}")
        private String basePackages;
    
    
        @Override
        protected String getKeyspaceName() {
            return keySpace;
        }
    
        @Override
        protected String getContactPoints() {
            return contactPoints;
        }
    
        @Override
        protected int getPort() {
            return port;
        }
    
        @Override
        public SchemaAction getSchemaAction() {
            return SchemaAction.CREATE_IF_NOT_EXISTS;
        }
    
        @Override
        public String[] getEntityBasePackages() {
            return new String[] {basePackages};
        }
        
    }