我有一个这样定义的 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
用它来与之交互。我有一个 POJO:
@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();
}
不幸的是,这会引发异常。不那么时髦的列类型可以正常工作,例如,aList<String>
和非嵌套的 `Map 类型的列可以正常工作。但是这张地图对我不起作用。
想知道是否不支持此功能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)