映射cassandra list" frozen< list< int>> spring-data-cassandra中的Java字段 [英] Mapping cassandra list<frozen<list<int>>> field to Java in spring-data-cassandra

查看:112
本文介绍了映射cassandra list" frozen< list< int>> spring-data-cassandra中的Java字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以告诉我如何将声明为 list< frozen< list< int>>> 的字段映射回spring-data-cassandra中的java。我可以通过 List< List< Integer>>> 来简单地保存数据,但是从数据库中读取数据时却无法正常工作,会弹出未找到编解码器的异常。

can someone point to me how a field declared list<frozen<list<int>>> can be mapped back into java in spring-data-cassandra. I'm able to simply save data through List<List<Integer>>> but doesn't work when reading from the database, a codec not found exception pops.

我们非常感谢您的帮助。

Help is much appreciated.

推荐答案

您的声明是正确的。但是对于嵌套集合,您需要创建Custom RowMapper来将行转换为DTO。

Your Declaration is correct. But for nested collection read you need to create Custom RowMapper to convert row to 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;
    }

}

现在我们要查询以下数据它。

Now we want to query data from it.

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

这篇关于映射cassandra list&quot; frozen&lt; list&lt; int&gt;&gt; spring-data-cassandra中的Java字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆