这是我的示例原始方法

public void insertIntoDb(SampleObject sample){
      ---------------------------------------
      ---------------------------------------
      code to prepare Insert statement
      ---------------------------------------
      ---------------------------------------
      session.executeAsync(insertStatement);
}


我正在为上述方法编写测试方法

public void insertIntoDbTest(){
      --------------------------------------
      ---------------------------------------
      preparing SampleObject and checking the size of the corresponding table before insert
      ---------------------------------------
      ---------------------------------------
      obj.insertIntoDb(sampleObject)

      ---------------------------------------
      checking the size of the corresponding table after insert
      ---------------------------------------
}


期望:执行上述测试方法后,应在cassandra中向表中添加1行,即如果在插入表大小之前为0,然后在插入表大小之后为1

实际:我得到的尺寸相同,即桌子前后的尺寸仅为0。

如果我更换

session.executeAsync(insertStatement);



ResultSetFuture future = session.executeAsync(insertStatement);

然后添加以下语句

future.get()

那我得到的是桌子尺寸的差异,即1

最佳答案

我怀疑您第一次尝试验证表大小时,计算(插入)未完成。

ResultSetFuture get()方法在必要时等待计算完成,然后检索其结果。

executeAsync方法不等待。

查询一旦传递到基础网络堆栈,它将立即返回。特别是,从此方法返回并不能保证查询有效,甚至不能提交给活动节点。访问ResultSetFuture时,将引发与查询失败有关的任何异常。资料来源:https://docs.datastax.com/en/drivers/java/2.1/com/datastax/driver/core/ResultSetFuture.html

09-10 02:37