У меня есть таблица Cassandra, определенная так:
create table foo (id int primary key, mapofmaps map<text, frozen<map<text, int>>>);
В который я помещаю некоторые данные:
insert into foo (id, mapofmaps) values (1, {'pets'; {'dog'; 42, 'cat'; 7}, 'foods': {'taco': 555, 'cake', '721'}});
Затем я пытаюсь использовать spring-data-cassandra
для взаимодействия с ним. У меня есть ПОЖО:
@Table
public class Foo {
@PrimaryKey
private Integer id;
@Column("mapofmaps")
private Map<String, Map<String, Integer>> mapOfMaps;
// getters/setters omitted for brevity
}
И Repository
:
public interface FooRepository extends CassandraRepository<Foo> {
}
А затем следующий код, чтобы попытаться получить все записи в виде простого теста:
public Iterable<Foo> getAllFoos() {
return fooRepository.findAll();
}
К сожалению, это вызывает исключение. Менее причудливые типы столбцов работают нормально, например. List<String>
и не вложенные столбцы типа карты работают нормально. Но эта карта карт у меня не работает.
Интересно, нет ли поддержки для этого в spring-data-cassandra
(хотя исключение, похоже, есть в коде DataStax) или мне просто нужно сделать что-то другое с POJO.
Возникшее исключение выглядит следующим образом:
Caused by: java.lang.NullPointerException: null
at com.datastax.driver.core.TypeCodec$MapCodec.deserialize(TypeCodec.java:821)
at com.datastax.driver.core.TypeCodec$MapCodec.deserialize(TypeCodec.java:775)
at com.datastax.driver.core.ArrayBackedRow.getMap(ArrayBackedRow.java:299)
at org.springframework.data.cassandra.convert.ColumnReader.get(ColumnReader.java:53)
TypeCodec
не поддерживает карты чего-либо, кроме простых типов; см. метод `TypeCodec.mapOf(...) :( Предполагая, что я не могу изменить схему таблицы, какие-либо предложения о наилучшем способе доступа к этому столбцу из Java? - person Jon Archer   schedule 08.11.2015