Отображение списка<cassandra <замороженного <list <int >>>> в Java в spring-data-cassandra
Может кто-то указать мне, как поле объявлено list<frozen<list<int>>>
может быть отображен обратно в Java в Spring-Data-Cassandra. Я могу просто сохранять данные через List<List<Integer>>>
но не работает при чтении из базы данных, появляется кодек не найден, исключение.
Помощь очень ценится.
1 ответ
Решение
Ваша декларация верна. Но для чтения вложенных коллекций вам необходимо создать Custom RowMapper для преобразования строки в DTO.
Пример:
Давай у нас будет стол ctest
CREATE TABLE ctest (
id int PRIMARY KEY,
data list<frozen<list<int>>>
);
И ДТО
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;
}
});