当前位置: 首页 > 知识库问答 >
问题:

卡桑德拉自动模式生成器

东郭鸿福
2023-03-14

首先,我对Cassandra很陌生,我来自关系数据库。我使用了Hibernate API,这使得与数据库相关的任务非常简单。我正在使用datastax中基于java的驱动程序来连接和执行查询。他们提供了实现JPA的映射库。到现在为止,一直都还不错。我创建了一个模型类,如下所示:

@Table(keyspace = "webscc", name = "t_data", readConsistency = "QUORUM", 
writeConsistency = "QUORUM",caseSensitiveKeyspace = false, 
caseSensitiveTable = false)
public class ChartData {
    @PartitionKey
    private UUID    id;
    @ClusteringColumn(0)
    private Date    timeStamp;
    @ClusteringColumn(1)
    private String  controller; 
    @Column(name = "value")
    private double  value;
    /** Constructors, getters and setters*/
}

现在我想创建一个新的ChartData对象并将其保存到数据库中。为此,我想实现Mapper。

Session session = Cluster.builder().addContactPoint(props.getProperty(HOSTNAME)).build()
                         .connect(props.getProperty(KEYSPACE));
MappingManager manager = new MappingManager(session);
Mapper<ChartData> mapper = manager.mapper(ChartData.class);
ChartData chartData = new ChartData("controller",24.44);
mapper.save(chartData);

我配置了所有内容,仍然无法将ChartData对象保存到表中。问题是它不能自动创建表,尽管我通过注释在ChartData中配置了所有内容。我做错了什么吗,还是应该手动创建所有必需的表。为什么这不像Hibernate那样自动创建数据库模式?

共有1个答案

漆雕彬彬
2023-03-14

数据轴驱动程序映射器不会自动创建表

这方面有一个未决问题:https://datastax-oss.atlassian.net/browse/JAVA-569

您必须首先手动创建表。

CREATE TABLE webscc.t_data(
    id uuid,
    timestamp timestamp,
    controller text,
    value double,
    PRIMARY KEY (id, timestamp, controller)
);

或在会话初始化后使用以下代码

session.execute("CREATE TABLE IF NOT EXISTS webscc.t_data(\n" +
        "        id uuid,\n" +
        "        timestamp timestamp,\n" +
        "        controller text,\n" +
        "        value double,\n" +
        "        PRIMARY KEY (id, timestamp, controller)\n" +
        "    )");
 类似资料:
  • 如果我们提供一个基于google cloud managed instance group概念的虚拟机,如何将新的虚拟机添加到集群中。 谢谢,

  • 我在做一个分布式数据库。我试图生成一个唯一的ID,它将作为Cassandra中的列族主键。 我想知道是否有一种方法可以根据时间生成一个唯一的ID?

  • 我目前在cassandra中有一个名为macrecord的表,类似于以下内容: 在这种情况下,我想不出其他解决方案,只有在macadd值重复的情况下删除整行,然后插入具有更新时间戳的新行。 是否有更好的解决方案在macadd值重复时更新时间戳,或者在我的原始表中只有macadd是主键的范围内查询时间戳值的替代方法。

  • 我正在尝试通过docker-compose创建docker图像。我怎么能做到? 我可以开始我的项目(spring boot+卡桑德拉)由docker-compose up。一切都很顺利。但在下一步,我想从这个项目图像,推动到docker hub和拉它从docker hub在其他计算机上测试。我尝试了“docker-compose build”、“docker-compose push”和“dock

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我们运行的cassandra集群有3个节点,复制因子为2。 我们的nodejs服务器是查询这个集群的唯一地方。 是否有其他任何地方的参数设置可能导致不一致的查询? cassandra v2.2.4 nodejs驱动程序v3.0.0 编辑-添加我正在做的事情的示例: 1)检查用户名是否被占用 2)创建用户