java - spring data cassandra仅保存列表中的单个对象

标签 java spring cassandra spring-data spring-data-cassandra

型号

    @Table(value = "bad_data")
    public class BadData {
        private String objectID;
        private String type;
        private String problems;
        private String owner;
        private String formattedID;
        private String project;

    @PrimaryKey
    private String train;
    private String status;

    /* Default constructor. */
    public BadData () {
        this.objectID = "";
        this.type = "";
        this.problems = "";
        this.owner = "";
        this.formattedID = "";
        this.project = "";
        this.train = "";
        this.status = "";
    }


    /* Getters and setters. */
    public void setObjectID (String objectID) {
        this.objectID = objectID;
    }

    public String getObjectID () {
        return this.objectID;
    }

    public void setType (String type) {
        this.type = type;
    }

    public String getType () {
        return this.type;
    }

    public void setProblems (String problems) {
        this.problems = problems;
    }

    public String getProblems () {
        return this.problems;
    }

    public void setOwner (String owner) {
        this.owner = owner;
    }

    public String getOwner () {
        return this.owner;
    }

    public void setFormattedID (String formattedID) {
        this.formattedID = formattedID;
    }

    public String getFormattedID () {
        return this.formattedID;
    }

    public void setProject (String project) {
        this.project = project;
    }

    public String getProject () {
        return this.project;
    }

    public void setTrain (String train) {
        this.train = train;
    }

    public String getTrain () {
        return this.train;
    }

    public void setStatus (String status) {
        this.status = status;
    }

    public String getStatus () {
        return this.status;
    }

}

存储库

@Autowired
public void save (CassandraOperations db) {
        BadData badData1 = new BadData();
        badData1.setTrain("train");
        badData1.setFormattedID("fid");
        badData1.addProblems("problem1");
        badData1.setObjectID("id");
        badData1.setOwner("lokesh");
        badData1.setType("story");
        badData1.setProject("om");
        badData1.setStatus("open");

        BadData badData2 = new BadData();
        badData2.setTrain("train");
        badData2.setFormattedID("fid");
        badData2.addProblems("problem2");
        badData2.setObjectID("id");
        badData2.setOwner("lokesh");
        badData2.setType("story");
        badData2.setProject("om");
        badData2.setStatus("open");

        BadData badData3 = new BadData();
        badData3.setTrain("train");
        badData3.setFormattedID("fid");
        badData3.addProblems("problem3");
        badData3.setObjectID("id");
        badData3.setOwner("lokesh");
        badData3.setType("story");
        badData3.setProject("om");
        badData3.setStatus("open");

        List<BadData> data = new ArrayList<>();
        data.add(badData1);
        data.add(badData3);
        data.add(badData2);

        db.insert(data);
    }

我正在尝试保存三个对象并将它们放入列表中。我只将一个对象(badData3)保存到数据库中。我更改了列表中这些对象的顺序。我注意到列表中间的任何对象都会被保存。有人能猜出可能的错误是什么吗

最佳答案

是(krsyk 正确),@PrimaryKey 字段 (train) 的值(“train”)对于列表中的所有实体都是相同的。

此外,您还应该查看 SD Cassandra 测试套件中测试类 (CassandraDataOperationsTest) 中的相应测试用例 (insertBatchTest)。

为了保证,我在测试末尾添加了以下代码片段...

assertThat(template.count(Book.class), is(equalTo(80l)));

并且,测试按预期通过。

请注意,我使用的是最新的 Spring Data Cassandra 1.4.2.RELEASE

另请注意,因为 Cassandra 中的每个 INSERTUPDATE 实际上都是“UPSERT”(请参阅​​ here ),那么由于重复的主键值,您实际上会覆盖列表中的每个条目(实体)。

关于java - spring data cassandra仅保存列表中的单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998269/

相关文章:

java - MockMVC jUnit Spring 测试

azure - 如何使用状态集 kubernetes 将 cassandra 数据位置安装到 azure 文件共享

java - 通过 IAM ServiceAccount 进行跨项目 PubSub 订阅

java - 多线程读取Java文件

Java 8 可选获取(如果存在)

java - 错误 : Could not find or load main class, Cassandra

cassandra - 在GCP上通过VPN进行Cassandra间DC同步

java - 梯度错误:Execution failed for task ':app:transformClassesWithJarMergingForDebug'

java - 使用 @ModelAttribute 时未显示自定义域对象

java - 将数据库配置查询值传递给 native 查询