【发布时间】:2016-08-03 03:32:59
【问题描述】:
我正在使用 Spring data Cassandra,连接 Cassandra 数据库,配置文件扩展 AbstractCassandraConfiguration 和覆盖功能 -
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.RECREATE_DROP_UNUSED;
}
@Override
public String[] getEntityBasePackages() {
return new String[] {"com.example"};
}
我的目标是在 Cassandra 中使用 @Table 注释从 com.example 包中提到的实体自动创建表。 例如 -
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 中创建任何东西。 任何帮助,将不胜感激。谢谢。
【问题讨论】:
-
当使用 Spring Boot 时,这还不是开箱即用的。这个问题有一张公开票 (github.com/spring-projects/spring-boot/issues/4886),也许你想投票。
-
小心,通常让应用程序自动为您生成架构是个坏主意。架构和数据模型对于使用 Cassandra 的应用程序的成功至关重要,因此请自行处理
-
嗨@mp911de,感谢您的评论。但我认为更改 SchemaAction 属性应该可行。我已经在创建 BasicCassandraMappingContext 的 bean,所以理想情况下它应该可以工作。到目前为止,是否有任何解决方法可以从实体自动创建表?
-
感谢@doanduyhai 的建议,但我将其用于开发和测试目的,而不是用于生产。在将我的应用程序转移到生产环境时,我将创建脚本文件来创建和更新架构。
-
如果您用于测试,请考虑切换到 www.achilles.io。我们完全支持带有嵌入式 Cassandra 的 JUnit 进行测试。披露:我是阿喀琉斯的创造者
标签: cassandra spring-boot cassandra-2.0 cassandra-2.1 spring-data-cassandra