У меня есть класс с полем типа Map‹String, List›, я не могу сохранить этот компонент в cassandra. Получение следующей ошибки при попытке вставить объект с помощью шаблона cassandra. Я создал CassandraMappingContext
и также установил userTypeResolver
.
[Exception in request ] [org.springframework.data.mapping.MappingException: Cannot resolve value type for java.util.Map<java.lang.String,java.util.List<java.lang.String>>.
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.lambda$getMapDataType$13(CassandraMappingContext.java:702)
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.getDataTypeWithUserTypeFactory(CassandraMappingContext.java:639)
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.getMapDataType(CassandraMappingContext.java:694)
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.getDataTypeWithUserTypeFactory(CassandraMappingContext.java:639)
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.getDataTypeWithUserTypeFactory(CassandraMappingContext.java:587)
at org.springframework.data.cassandra.core.mapping.CassandraMappingContext.getDataType(CassandraMappingContext.java:547)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.getPropertyTargetType(MappingCassandraConverter.java:725)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.lambda$getTargetType$3(MappingCassandraConverter.java:718)
at java.util.Optional.orElseGet(Optional.java:267)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.getTargetType(MappingCassandraConverter.java:706)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.getWriteValue(MappingCassandraConverter.java:747)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.writeUpdateFromWrapper(MappingCassandraConverter.java:478)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.write(MappingCassandraConverter.java:383)
at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.write(MappingCassandraConverter.java:365)
at org.springframework.data.cassandra.core.QueryUtils.createUpdateQuery(QueryUtils.java:132)
at org.springframework.data.cassandra.core.CassandraTemplate.update(CassandraTemplate.java:584)
at org.springframework.data.cassandra.core.CassandraTemplate.update(CassandraTemplate.java:571)
Похоже, значение на карте не может быть ничем иным, как примитивным типом данных. версия весенних данных cassandra 2.1.5RELEASE
но если я напрямую сохраню это поле в db и попытаюсь запустить get API из кода, чтобы получить данные, я смогу правильно получить поле.
Я делаю что-то не так при сохранении данных в коде?
ОБНОВЛЕНИЕ. Попытался добавить @CassandraType(type = Name.MAP, typeArguments = {Name.TEXT, Name.LIST}) поверх поля, но похоже, что нам не разрешено иметь ничего, кроме примитива, для значения в КАРТА.
Также попробовал @CassandraType(type = Name.MAP, typeArguments = {Name.TEXT, Name.TEXT}), но тогда есть некоторые исключения приведения классов
create table person ( id varchar PRIMAY KEY, name varchar, additionalinfo map<varchar, frozen<list<varchar>>> );
- person Mahin   schedule 24.04.2021@Data @Table("person") public class Person { @Id private String id; private String name; private Map<String, Liat<String>> additionalinfo; }
- person Mahin   schedule 24.04.2021