Cassandra计数器在spring存储库中的数据类型操作

时间:2017-11-23 15:21:32

标签: java spring spring-boot cassandra spring-data-cassandra

我有一个spring-boot应用程序,如果不存在,我想在其中创建Cassandra 计数器表。我正在使用存储库。

UserPoints POJO:

/**
 * 
 * @author Prakash Pandey 23-Nov-2017
 *
 */
@Table("user_points")
public class UserPoints {

    @PrimaryKeyColumn(name = "app_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private long appId;

    @PrimaryKeyColumn(name = "user_name", ordinal = 0, type = PrimaryKeyType.CLUSTERED)
    private String userName;

    @Column(value = "points")
    long points;


    public long getAppId() {
        return appId;
    }

    public void setAppId(long appId) {
        this.appId = appId;
    }

    public long getPoints() {
        return points;
    }

    public void setPoints(long points) {
        this.points = points;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "UserPoints [appId=" + appId + ", userName=" + userName + ", points=" + points + "]";
    }
}

UserPoint存储库POJO:

@Repository
public interface UserPointRepository extends CassandraRepository<UserPoints> {

}

该表是在Cassandra数据库中成功创建的,具有以下定义:

CREATE TABLE user_points (
  app_id bigint,
  user_name text,
  points bigint,
  PRIMARY KEY (app_id, user_name)
)

问题points列的数据类型为bigint,预计为counter数据类型。

我有两个问题

  1. 如何创建计数器(具有计数器的列) 使用存储库的数据类型表。
  2. 如何使用更新(递增,递减)计数器列 库中。

1 个答案:

答案 0 :(得分:1)

TL; DR

存储库不支持

counter,我不确定是否有一种很好的方法来支持它们。

说明

Spring Data Repositories旨在使用传递给save(Object)的实际对象的数据来保存/更新实体。没有应用数据库端修饰符。计数器需要服务器端操作(递增,递减),这不能通过save(…)方法表示。