1

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

4

2 に答える 2