2014-12-02 125 views
2

我的春天數據卡珊德拉的配置是這樣的:無法獲取SchemaAction.CREATE工作

@Configuration 
@EnableCassandraRepositories(basePackages = { 
     "mypackage.repository.cassandra", 
}) 
public class DistributedRepositoryConfiguration { 

    // ... 

    @Bean 
    public CassandraSessionFactoryBean session() throws Exception { 

     CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
     session.setCluster(cluster().getObject()); 
     session.setKeyspaceName(configuration.get().getKeyspace()); 
     session.setConverter(converter()); 
     session.setSchemaAction(SchemaAction.CREATE); 

     return session; 
    } 

} 

一般來說,春天的數據卡珊德拉的作品在我的項目。但是,當我開始我的應用程序時,我沒有創建表。任何人都可以告訴我我做錯了什麼?

回答

5

,如果你想擁有自動錶的創作,你應該告訴卡桑德拉到哪裏尋找實體類它不能很好地在文檔中寫道:

<cassandra:mapping entity-base-packages="your.package" /> 

如果你想要做的使用annotiation配置相同,你必須明確告訴CassandraTemplate在哪裏尋找它。所以

@Bean 
public CassandraSessionFactoryBean session() throws Exception { 

    CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
    session.setCluster(cluster().getObject()); 
    session.setKeyspaceName(keyspaceName); 
    session.setConverter(converter()); 
    session.setSchemaAction(SchemaAction.CREATE); 

    return session; 
} 

@Bean 
public CassandraConverter converter() throws Exception { 
    return new MappingCassandraConverter(mappingContext()); 
} 

@Bean 
public CassandraMappingContext mappingContext() throws Exception { 
    BasicCassandraMappingContext bean = new BasicCassandraMappingContext(); 
    bean.setInitialEntitySet(CassandraEntityClassScanner.scan(("package.with.your.entities"))); 

    return bean; 
} 

能夠輕鬆做到這一點我建議使用AbstractCassandraConfiguration,並覆蓋你需要的方法。

+0

真棒,它的作品。由於某些原因'@ EnableCassandraRepositories'和'AbstractCassandraConfiguration'確實不是 – deFreitas 2017-04-11 17:39:43

+0

,他們不這樣做,是否有任何解釋爲什麼會發生這種情況?或者,我們是否錯誤地使用它們? – Carolik 2017-08-14 10:28:51