Spring数据支持使用java实体创建表

时间:2016-04-12 13:23:01

标签: cassandra spring-boot cassandra-2.0 cassandra-2.1 spring-data-cassandra

我正在使用Spring数据Cassandra,与Cassandra数据库连接,配置文件扩展AbstractCassandraConfiguration和覆盖函数 -

@Override
public SchemaAction getSchemaAction() {
    return SchemaAction.RECREATE_DROP_UNUSED;
}

@Override
public String[] getEntityBasePackages() {
    return new String[] {"com.example"};
}

我的目标是在带有@Table注释的com.example包中提到的实体中自动在Cassandra中创建表。 例如 -

package com.example;

import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;

@Table(value="goal")
public class Goal {

    @PrimaryKey
    private int id;

    private String description;

    public Goal(int id, String description) {
        this.id = id;
        this.description = description;
    }

    public Goal() {

    }

    public int getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }


    public void setId(int id) {
        this.id = id;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Goals [id=" + id + ", description=" + description + "]";
    }

}

对于这个实体,使用给定的配置,应该在spring初始化期间创建一个表,但是它没有这样做。 不过没有例外,它只是在Cassandra中没有创造任何东西。 任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我也遇到过类似的要求和以下工作: -

@Bean
public CassandraClusterFactoryBean cluster() {

    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
    cluster.setContactPoints("127.0.0.1");
    cluster.setPort(9042);
    return cluster;
}    
public String[] getEntityBasePackages() {
    return new String[] { "com.user.entity" };
}

protected String getKeyspaceName() {
    return "user_db";
}

public SchemaAction getSchemaAction() {
    return SchemaAction.CREATE_IF_NOT_EXISTS;
}

上下文完成后,您可以查看cassandra中的表格。 假设您的密钥空间已在cassandra中创建。 如果您还想动态创建密钥空间,请告知。