首先,我是卡桑德拉的新手,我来自关系数据库。我使用了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那样自动创建数据库模式?
发布于 2017-06-07 19:40:30
Datastax驱动程序映射程序不会自动创建表
在这方面有一个悬而未决的问题: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" +
" )");https://stackoverflow.com/questions/44414137
复制相似问题