2014-12-23 5 views
1

Я использую библиотеку Achilles для отображения объектов в Java. Ахиллес поддерживает счетчики Cassandra (link), но проблема в том, что когда я делаю запрос выбора, значение поля типа Counter равно null.Achilles Cassandra counter always null

Вот моя модель:

@Entity(table = "watchs_per_segment") 
public class WatchsPerSegment { 

    @EmbeddedId 
    private Key key; 

    @Column 

    private Counter morning; 
    @Column 
    private Counter noon; 
    @Column 
    private Counter afternoon; 
    @Column 
    private Counter accesspt; 
    @Column 
    private Counter night; 


    public WatchsPerSegment() 
    { 

    } 


    public WatchsPerSegment(Key key, Counter morning, Counter noon, 
      Counter afternoon, Counter accesspt, Counter night) { 
     this.key = key; 
     this.morning = morning; 
     this.noon = noon; 
     this.afternoon = afternoon; 
     this.accesspt = accesspt; 
     this.night = night; 
    } 
    //getters and setters 


    public static class Key { 
     @PartitionKey 
     private String segment; 

     @ClusteringColumn(value = 1, reversed = true) 
     private Date day; 

     @ClusteringColumn(2) 
     private boolean afterreco; 

     public Key() { 
     } 

     public Key(String segment, Date day, boolean afterreco) { 
      this.segment = segment; 
      this.day = day; 
      this.afterreco = afterreco; 
     } 

     //getter and setter 

} 

Этот запрос:

 List<WatchsPerSegment> watchs = manager 
    .sliceQuery(WatchsPerSegment.class).forSelect() 
    .withPartitionComponents("253") 
    .fromClusterings(new Date(2014, 11, 07), true).get(); 

Я напечатал результат и все счетчики были неинициализированным:

WatchsPerSegment [key=Key [segment=253, day=Thu Nov 07 00:00:00 CET 2014, afterreco=true], morning=null, noon=null, afternoon=null, accesspt=null, night=null] 

Является ли это ошибка Ахилла или есть проблема с моей моделью?

+1

Без вашего запроса, схемы или каких-либо подробностей это будет сложно ответить. – ethrbunny

+0

Вы правы, я обновил свой вопрос – Mouna

ответ

0

Чтобы включить данные счетчика, вам необходимо вызвать команду CQL UPDATE.

Счетчик CQL - специальный тип столбца. Чтобы заставить счетчик работать, вам необходимо следовать определенным правилам. Это псевдокод ....

// построить ключевой объект Ключ key = new Key();

// используйте ключ obejct для обновления записи // это нормально, что этот ключ является новым. C * будет поддерживать запись WatchsPerSegment countRec = cqlDao.findReference (WatchsPerSegment.class, key); countRec.getNoon(). Incr(); // увеличиваем счетчик cqlDao.update (countRec); // это upsert

// теперь вы можете получить счетчик WatchsPerSegment counter = cqlDao.find (WatchsPerSegment.class, key); Длинные id = counter.getNoon(). Get(); // id - значение счетчика