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 にすると、問題なく動作します。