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

Mapping cassandra list<frozen<list<int>>> field to Java in spring-data-cassandra

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

非常感谢您的帮助。

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

示例:

让我们进行 table ctest

CREATE TABLE ctest (
    id int PRIMARY KEY,
    data list<frozen<list<int>>>
);

和 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;
    }

}

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

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;
    }
});