如何更新已建立索引的字段?

时间:2015-06-11 09:58:08

标签: scala cassandra phantom-dsl

我想更新Cassandra中使用幻像scala sdk索引的字段,如:

this.update.where(_.id eqs folderId)
      .and(_.owner eqs owner)
      .modify(_.parent setTo parentId)

父字段是表中的索引字段。但是编译代码时不允许该操作,会有编译异常,如:

[error] C:\User\src\main\scala\com\autodesk\platform\columbus\cassandra\DataItem.scala:161: could not find implicit value for evidence parameter of type com.websudos.phantom.column.ModifiableColumn[T]

错误是由更新索引的字段引起的。

我的解决方法是删除记录并插入新记录以“更新”记录。

这种情况有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您不能更新属于主键的字段,因为如果您这样做,则表示您正在渲染Cassandra无法重新组合您正在更新的行的哈希值。

阅读here了解有关该主题的详细信息。从本质上讲,如果您有HashMap[K, V],那么您需要更新K,但这样做会导致您永远无法再次检索V

所以在Cassandra中,就像在HashMap中一样,索引的更新是使用DELETE然后是新的INSERT完成的。这就是为什么幻影故意阻止你编译查询的原因,为了防止无效的CQL,我编写了那些编译时限制。