次のように定義された 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();
}
残念ながら、これは例外をスローします。よりファンキーでない列タイプは問題なく動作します。たとえば、List<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)