【问题标题】:Spring data support to create tables using java entitiesSpring数据支持使用java实体创建表
【发布时间】: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


【解决方案1】:

我也面临类似的要求和以下工作:-

@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 中创建。 如果您还想动态创建键空间,请告知。

【讨论】:

  • 我只是想了解,这与我尝试的有什么不同。我试过 - SchemaAction.RECREATE_DROP_UNUSED; 这没有用。你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2021-04-14
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多