映射cassandra list" 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>>>
来简单地保存数据,但是从数据库中读取数据时却无法正常工作,会弹出未找到编解码器的异常。
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" frozen< list< int>> spring-data-cassandra中的Java字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!