将 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;
}
});
谁能告诉我如何将声明为 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;
}
});