Отображение списка<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;
    }
});
Другие вопросы по тегам