Cassandra Object Mapping API目前不支持更新吗?

时间:2014-11-04 14:11:51

标签: cassandra datastax datastax-java-driver

我正在使用Cassandra Object Mapping API和Cassandra 2.1。在API中,执行以下步骤时,行似乎是 UPDATE

  1. 获取对象(Mapper.get)
  2. 更改您要更新的字段
  3. 保存对象(Mapper.save)
  4. 转换为 SELECT ,后跟 INSERT 。现有的CQL3.1 UPDATE 语句是否会在Cassandra Object Mapping API的后期支持部分更新?我想避免初次阅读。

2 个答案:

答案 0 :(得分:2)

  1. 您可以使用Accessor对更新进行编码。

  2. 透明save vs update要么需要使用代理和字段拦截器(复杂的impl),要么导致实际隐藏预先读取的反模式。

  3. 使用Accessors可以为您提供所需的一切,而无需使映射模块在幕后执行魔术。

    此主题已在此处讨论:https://datastax-oss.atlassian.net/plugins/servlet/mobile#issue/JAVA-474

答案 1 :(得分:0)

试试这个mapper https://github.com/valchkou/cassandra-driver-mapping

它支持部分更新,包括集合

mapper.updateValue(id, Entity.class, propertyName, value);

/** Append value to the Set, List or Map. */
append(id, Entity.class, propertyName, value);

https://github.com/valchkou/cassandra-driver-mapping#write

此外,它还具有自动架构同步功能(以及更多功能),无法在datastax映射器中使用

使用示例:

Entity entity = new Entity();
mappingSession.save(entity);
entity = mappingSession.get(Entity.class, id);
mappingSession.delete(entity); 

可在maven central上找到:

<dependency>
  <groupId>com.valchkou.datastax</groupId>
  <artifactId>cassandra-driver-mapping</artifactId>          
</dependency>