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