Datastax cassandra对象映射器设置一致性,如果不存在

时间:2015-06-09 22:00:50

标签: java cassandra datastax datastax-java-driver

我创建了用@Table注释的实体,它类似于我的cassandra表。我可以做保存,获取和一切没有太多问题。

当我想做一些更令人兴奋的事情时,我的问题就出现了,例如设置一致性等级,或者如果不存在,则插入或类似的东西。基本上有@Table的注释选项,您可以在其中配置读写一致性但是如果使用Spring并通过配置文件设置该怎么办?我真的很喜欢这些东西的外部配置。另外如果不存在怎么办?

我知道您可以将saveQuerygetQuery作为Statement,并且可以从中设置至少一致但看起来很难看,然后您必须采用结果集,执行地图和得到你的对象。

有两个问题:

  • 是否有更好的方法可以为访问者和实体动态设置对象映射器操作的一致性级别?
  • 如果不存在,如何保存映射对象?

2 个答案:

答案 0 :(得分:0)

  
    

如果不存在,如何保存映射对象?

  

您需要使用访问者界面并在那里指定自定义查询。如果您需要仅使用一小部分可以完美运行的字段。

如果需要使用IF NOT EXISTS保存整个对象,可以使用两个步骤完成:首先使用IF NOT EXISTS更新specfic字段以逻辑地说该行正在更新,然后将对象保存到该行使用mapper.save操作。这完全取决于它是否适用于你的app逻辑。

docs from cassandra

它可以包装到使用mapper.save/load进行简单操作的yout Dao对象中。

答案 1 :(得分:0)

我理解这是一个非常老的问题。但是这里的一些答案已经过时,因此,我在这里添加我的答案。

在驱动程序版本4.x中,您可以使用@StatementAttributes批注为每个映射器dao方法设置一致性级别和其他语句属性。

@Dao 
 public interface ProductDao {   
    @Select  
    @StatementAttributes(consistencyLevel = "ONE", pageSize = 500)  
    Product findById(int productId); 
}