我在卡桑德拉2.1中使用Cassandra Object Mapping API。在API,它看起来像一排的UPDATE进行做这些步骤:Cassandra对象映射API目前不支持更新吗?
- 获取对象(Mapper.get)
- 变化要更新
- 保存对象的字段( Mapper.save)
其转换为一个SELECT后跟一个INSERT。现在的CQL3.1 UPDATE语句在Cassandra对象映射API的稍后阶段是否支持部分更新?我想避免最初的阅读。
我在卡桑德拉2.1中使用Cassandra Object Mapping API。在API,它看起来像一排的UPDATE进行做这些步骤:Cassandra对象映射API目前不支持更新吗?
其转换为一个SELECT后跟一个INSERT。现在的CQL3.1 UPDATE语句在Cassandra对象映射API的稍后阶段是否支持部分更新?我想避免最初的阅读。
您可以使用Accessor
来编码更新。
透明save
VS update
要么会是使用代理和外地拦截器(复杂IMPL)规定,或导致实际上隐藏读之前节省反模式。
使用访问器应该为您提供所需的一切,而无需使映射模块在幕后执行魔术。
这个主题已经在这里讨论:https://datastax-oss.atlassian.net/plugins/servlet/mobile#issue/JAVA-474
试试这个映射 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
而且它具有自动模式同步功能(和更少的功能)在数据传输中漏掉了映射器
用法示例:
Entity entity = new Entity();
mappingSession.save(entity);
entity = mappingSession.get(Entity.class, id);
mappingSession.delete(entity);
Maven的中央可供选择:
<dependency>
<groupId>com.valchkou.datastax</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
</dependency>
感谢亚历克斯,我都会看着那吉拉,看看你们拿出。我猜“Accessor”与编写自己的CQL语句几乎相同(这非常灵活)。 'Accessor'语法的一个问题是你静态定义要更新的列是否正确?例如:'@Query(“UPDATE users SET first_name =:first,last_name =:last WHERE id =:id”)'我总是需要同时更新'first'和'last',据我了解。 – reikje 2014-11-05 08:47:03