Возникла проблема с драйвером 4.5 Datastax Cassandra. Я не могу заставить работать любой из этих @Queries:
@Dao
public interface SampleTable2Dao extends BaseDao<SampleTable2> {
//@Query("UPDATE sampletable2 SET cntrfld = cntrfld + :toAdd WHERE key1 = :key1Value AND key2 = :key2Value AND key3 = :key3Value")
@Query("UPDATE sampletable2 SET cntrfld = cntrfld + 1 WHERE key1 = 1 AND key2 = 1 AND key3 = 1;")
CompletableFuture<Void> addCountAsync(int toAdd, int key1Value, int key2Value, int key3Value);
@Query("UPDATE sampletable2 SET cntrfld = cntrfld + 1 WHERE key1 = 1 AND key2 = 1 AND key3 = 1;")
void addCount(int toAdd, int key1Value, int key2Value, int key3Value);
@Query("UPDATE sampletable2 SET cntrfld = cntrfld + 1 WHERE key1 = 1 AND key2 = 1 AND key3 = 1;")
void addCount();
Он просто зависает: getSampleTable2Dao().addCount();
Запросы работают нормально непосредственно в Кассандре.
Спасибо
PS Вот таблица, которую хочет проверить каждый:
CREATE TABLE sampletable2 (
key1 int,
key2 int,
key3 int,
cntrfld counter,
PRIMARY KEY (key1, key2, key3)
);
update # 1
После некоторого копания я обнаружил, что именно в этом сгенерированном коде он висит. Ничего общего с фактическим запросом:
this.sampleTable2DaoCache = new LazyReference<>(() -> SampleTable2DaoImpl__MapperGenerated.init(context));
@Override
public SampleTable2Dao sampleTable2Dao() {
return sampleTable2DaoCache.get();
}
Я работаю в обратном направлении, разбирая вещи, пока не смогу заставить их работать. Другие DAO работают нормально - единственная разница с этим - поле счетчика.
UPDATE # 2 ... "реальная" проблема вовсе не в @Query ... а в @Entity с полями счетчика.
@CqlName("cntrfld")
private Long cntrFld;
Если в Кассандре это поле является счетчиком (3.11.4 btw), код просто зависает. Если я сделаю поле bigint, он будет работать просто отлично!