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

问题描述 投票:3回答:2

我创建了以@Table注释的实体,它类似于我的cassandra表。我可以保存,获取所有内容,而不会遇到太多问题。

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

[我知道您可以将saveQuerygetQuery设为Statement,并且可以从中至少设置一致性,但是看起来很难看,然后必须获取结果集,进行映射并获取对象。

有两个问题:

  • 是否有更好的方法为访问器和实体同时动态设置对象映射器操作的一致性级别?
  • 如果不存在,如何保存映射对象?
java cassandra datastax datastax-java-driver
2个回答
0
投票

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

您将需要使用访问器界面并在此处指定您的自定义查询。如果您只需要审核一小部分将完美工作的字段。

如果需要使用IF NOT EXISTS保存整个对象,可以使用两个步骤来完成:首先使用IF NOT EXISTS更新特定字段以逻辑上说该行正在更新,其次使用来将对象保存到该行mapper.save操作。这完全取决于您的应用逻辑是否适合。

docs from cassandra

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


0
投票

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

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

@Dao 
 public interface ProductDao {   
    @Select  
    @StatementAttributes(consistencyLevel = "ONE", pageSize = 500)  
    Product findById(int productId); 
}
© www.soinside.com 2019 - 2024. All rights reserved.