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();
查询直接在 Cassandra 中运行良好。
谢谢
PS这里是任何人都想测试的表格:
CREATE TABLE sampletable2 (
key1 int,
key2 int,
key3 int,
cntrfld counter,
PRIMARY KEY (key1, key2, key3)
);
更新#1
经过一番挖掘,我发现它在这个生成的代码中挂起。与实际查询无关:
this.sampleTable2DaoCache = new LazyReference<>(() -> SampleTable2DaoImpl__MapperGenerated.init(context));
@Override
public SampleTable2Dao sampleTable2Dao() {
return sampleTable2DaoCache.get();
}
我正在向后工作,直到我可以让它工作为止。其他 DAO 工作正常 - 唯一的区别是计数器字段。
更新#2 ...“真正的”问题根本不是@Query ...而是带有计数器字段的@Entity。
@CqlName("cntrfld")
private Long cntrFld;
如果此字段是 Cassandra (3.11.4 btw) 中的计数器,则代码将挂起。如果我将字段设置为 bigint,它就可以正常工作!