【问题标题】:datastax cassandra driver: how to return success or failure from list of ResultSet for insert statementsdatastax cassandra 驱动程序:如何从插入语句的 ResultSet 列表中返回成功或失败
【发布时间】:2019-03-08 01:41:22
【问题描述】:

我正在使用 datastax object mapperaccessor 将数据插入到我的 cassandra 表中。在链接的文档中,它说返回类型规范会影响查询的执行方式。我希望查询异步执行,所以我选择使用ResultSetFuture

@Accessor
interface MyTableAccessor {
    @Query("INSERT INOT MY_TABLE " +
        "SET value = :v " +
        "WHERE $ID = :id ")
    fun insertValue(@Param("v") value: String, @Param("id") id: String): ResultSetFuture
}

我的插入调用是:

val id = ...
val insertFutures = myList.map {
  myTableAccessor.insertValue(it, id)
}

我还为这些期货添加了回调:

insertFutures.forEach {
    Futures.addCallback(it, MyCallback(stats, tags))
}

其中MyCallback 实现FutureCallback 接口。我结束通话:

return Futures.inCompletionOrder(insertFutures)
    .map { it.get() }

这会返回给我List<ResultSet>。 但我想为插入调用返回一个Boolean,以表明插入操作成功。我不确定如何使用返回的 List<ResultSet> 来做到这一点。

【问题讨论】:

    标签: cassandra kotlin datastax future objectmapper


    【解决方案1】:

    仅当使用轻量级事务 (LWT) 时,插入查询才会返回结果。在其他情况下,插入查询不返回任何内容,操作成功是您得到ResultSet 而不是异常。因此,在您的情况下,您只需添加始终返回 true 的 onSuccess 回调和返回 false 的 onFailure

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2016-06-28
      • 1970-01-01
      • 2018-07-16
      • 2017-03-08
      • 2019-04-18
      • 2016-01-22
      • 2016-04-29
      • 2017-08-04
      相关资源
      最近更新 更多