2016-06-23 5 views
0

모델 나는이 목록에 배치 세 개의 객체를 저장하려고스프링 데이터 카산드라

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

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

} 

저장소. 데이터베이스에 저장된 객체 (badData3)가 하나뿐입니다. 목록에서 해당 객체의 순서를 변경했습니다. 나는 이제까지 목표가 목록의 중앙에 저장되고 있다는 것을 알아 차렸다. 어떤 사람이 가능한 오류를 추측 할 수 있습니까?

답변

1

@PrimaryKey은 train 필드이고 각 개체의이 필드는 동일한 값인 "train"으로 설정되므로 서로 오버라이드 할 수 있습니다.

2

예 (krsyk이 맞음) @PrimaryKey 필드 (train)의 값 ("train")은 목록의 모든 항목에 대해 동일합니다.

또한, 당신은 SD 카산드라 테스트 스위트의 테스트 클래스 (CassandraDataOperationsTest)에서 해당 테스트 케이스 (insertBatchTest)를 살펴 있어야합니다. 안심 들어

, 나는 ... 시험의 끝에

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

그리고, 예상대로 통과 시험을 다음과 같은 코드를 추가했습니다.

참고 : 최신 스프링 데이터 카산드라1.4.2.RELEASE을 사용하고 있습니다. 카산드라의 모든 INSERT 또는 UPDATE이 (here 참조) 실제로 "UPSERT"때문에

이 또한주의, 당신은 효과적으로 때문에 중복 된 기본 키 값의 목록에 각 항목 (개체)를 덮어 쓰기한다.