将 cassandra list<frozen<list<int>>> 字段映射到 spring-data-cassandra 中的 Java

Now*_*dia 1 cassandra spring-data-cassandra

有人可以指出我如何将声明的字段list<frozen<list<int>>>映射回 spring-data-cassandra 中的 java。我可以简单地保存数据,List<List<Integer>>>但在从数据库读取时不起作用,未找到编解码器异常弹出。

非常感谢帮助。

Ash*_*lam 5

你的声明是正确的。但是对于嵌套集合读取,您需要创建自定义 RowMapper 以将行转换为 DTO。

例子 :

让我们有表 ctest

CREATE TABLE ctest (
    id int PRIMARY KEY,
    data list<frozen<list<int>>>
);
Run Code Online (Sandbox Code Playgroud)

和 DTO

public class CTest {

    @PrimaryKey
    private int id;

    private List<List<Integer>> data;

    public CTest() {
    }

    private void setData(List<List<Integer>> data) {
        this.data = data;
    }

    public List<List<Integer>> getData() {
        return data;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我们想从中查询数据。

List<CTest> results = cassandraOperations.query("SELECT * FROM ctest  WHERE id = 1", new RowMapper<CTest>() {

    private final TypeToken<List<Integer>> listOfInt = new TypeToken<List<Integer>>() {};

    public CTest mapRow(Row row, int rowNum) throws DriverException {
        CTest test = new CTest();
        test.setId(row.getInt("id"));
        test.setData(row.getList("data", listOfInt));
        return test;
    }
});
Run Code Online (Sandbox Code Playgroud)