【问题标题】:spring data cassandra saving only a single object in the listspring data cassandra 在列表中只保存一个对象
【发布时间】:2016-10-26 04:19:40
【问题描述】:

型号

    @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)保存到数据库中。我更改了列表中这些对象的顺序。我注意到列表中间的任何对象都被保存了。有人能猜出可能的错误是什么

【问题讨论】:

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


    【解决方案1】:

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

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

    为了安心,我在测试的最后加了如下代码sn -p...

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

    而且,测试按预期通过了。

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

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

    【讨论】:

      【解决方案2】:

      您的 @PrimaryKey 是 train 字段,并且您将每个对象中的此字段设置为相同的值:"train",因此它们将相互覆盖。

      【讨论】:

        猜你喜欢
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 2018-06-25
        • 2013-04-21
        • 1970-01-01
        相关资源
        最近更新 更多