10

私はそのような自分のリポジトリを作成しました:

public interface MyRepository extends TypedIdCassandraRepository<MyEntity, String> {
}

では、そのためのcassandraテーブルをどのように自動的に作成するのかという質問は? MyRepository現在、Springはエンティティを存在しないテーブルに挿入しようとする注入を行います。

Spring Containerの起動時にcassandraテーブルを作成する方法はありますか(存在しない場合)?

PS xml の行を追加してBeanFactoryなどを作成せずに、config boolean プロパティだけがあれば非常に便利です。:-)

4

5 に答える 5

5

また、AbstractCassandraConfiguration 実装でgetEntityBasePackages()メソッドをオーバーライドする必要があり ます。これにより、Spring は @Table でアノテーションを付けたクラスを見つけて、テーブルを作成できるようになります。

@Override
public String[] getEntityBasePackages() {
    return new String[]{"com.example"};
}
于 2015-05-05T21:07:58.420 に答える
4
  1. pom.xmlファイルにspring-data-cassandra依存関係を含める必要があります。
  2. 以下のようにTestConfig.classを構成します。

    @Configuration
    @PropertySource(value = { "classpath:Your .properties file here" })
    @EnableCassandraRepositories(basePackages = { "base-package name of your Repositories'" })
    public class CassandraConfig {
    
    @Autowired
    private Environment environment;
    
    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
        cluster.setContactPoints(env.getProperty("contactpoints from your properties file"));
        cluster.setPort(Integer.parseInt(env.getProperty("ports from your properties file")));
        return cluster;
    }
    
    @Bean
    public CassandraConverter converter() {
        return new MappingCassandraConverter(mappingContext());
    }
    
    @Bean
    public CassandraSessionFactoryBean session() throws Exception {
        CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
        session.setCluster(cluster().getObject());
        session.setKeyspaceName(env.getProperty("keyspace from your properties file"));
        session.setConverter(converter());
        session.setSchemaAction(SchemaAction.CREATE_IF_NOT_EXISTS);
        return session;
    }
    
    @Bean
    public CassandraOperations cassandraTemplate() throws Exception {
        return new CassandraTemplate(session().getObject());
    }
    
    @Bean
    public CassandraMappingContext mappingContext() throws ClassNotFoundException {
        CassandraMappingContext mappingContext= new CassandraMappingContext();
        mappingContext.setInitialEntitySet(getInitialEntitySet());
        return mappingContext;
    }
    
    @Override
    public String[] getEntityBasePackages() {
        return new String[]{"base-package name of all your entity annotated 
    with @Table"};
    }
    
    @Override
    protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
        return CassandraEntityClassScanner.scan(getEntityBasePackages());
    }
    }
    

    この最後のgetInitialEntitySetメソッドは、Optional の可能性があります。これもなしで試してみてください。

  3. Keyspacecontactpoints 、およびポート.propertiesファイルにあることを確認してください。お気に入り :

    cassandra.contactpoints=localhost,127.0.0.1
    cassandra.port=9042 
    cassandra.keyspace='Your Keyspace name here'
    
于 2017-10-06T17:07:16.460 に答える