映射cassandra列表<frozen <list <int>&gt;&gt; spring-data-cassandra中的Java字段

时间:2017-04-04 05:48:52

标签: cassandra spring-data-cassandra

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

非常感谢帮助。

1 个答案:

答案 0 :(得分:3)

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

示例:

我们有表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;
    }
});