2016-06-23 1 views
0

Modèledonnées printemps cassandra sauver un seul objet dans la liste

@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; 
    } 

} 

dépôt

@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); 
    } 

Je suis en train de sauver trois objets en les plaçant dans la liste. Je n'ai enregistré qu'un seul objet (badData3) dans la base de données. J'ai changé l'ordre de ces objets dans la liste. J'ai remarqué que l'objet qui est au milieu de la liste est enregistré. Peut-on deviner quelle pourrait être l'erreur possible être

Répondre

1

Votre @PrimaryKey est le champ de train, et vous définissez ce champ dans chaque objet à la même valeur: "train" de sorte qu'ils se surchargeront mutuellement.

2

Oui (krsyk est correct), la valeur ("train") de votre champ @PrimaryKey (train) est la même pour toutes les entités de votre liste.

En outre, vous devriez jeter un oeil sur le cas de test correspondant (insertBatchTest) dans la classe de test (CassandraDataOperationsTest) dans la suite de tests SD Cassandra.

Pour se rassurer, j'ai ajouté l'extrait de code suivant à la fin du test ...

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

Et, le test passé comme prévu. Note, j'utilisais la dernière Spring Data Cassandra1.4.2.RELEASE.

Notez également, parce que chaque INSERT ou UPDATE dans Cassandra est en fait un « UPSERT » (voir here), alors vous écrasez efficacement chaque entrée (entité) dans votre liste en raison de la valeur de clé primaire en double.