我正在尝试使用datastax mapper,它工作得很好,对于所有的基本类型。
我有麻烦使用它的地图类型列在cassandra表。可能,这个问题也与列的Set和List类型有关。
有谁能告诉我怎么做吗?只是为了使事情清楚,我使用下面的maven依赖
<cassandra.version>2.1.7.1</cassandra.version>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>${cassandra.version}</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>${cassandra.version}</version>
</dependency>
和使用com.datastax.driver.mapping.Mapper
下面是cassandra的表列结构,
features map<text, text>
下面是我如何定义vo映射到表使用datastax mapper,
@Table(keyspace = "keyspace", name = "mytable")
public class myVO{
@Column(name = "features")
private Map features;
//getters and setters here
}
下面是我如何使用mapper
映射protected myDAO(Class<T> typeParameterClass) {
this.mapper = new MappingManager(session).mapper(typeParameterClass);
}
myDAO(myVO.class);
然后抛出下面的异常
java.lang.IllegalArgumentException: Cannot map unknown class java.util.Map for field features
at com.datastax.driver.mapping.TypeMappings.getSimpleType(TypeMappings.java:67)
at com.datastax.driver.mapping.ReflectionMapper.extractSimpleType(ReflectionMapper.java:196)
at com.datastax.driver.mapping.ReflectionMapper$LiteralMapper.<init>(ReflectionMapper.java:63)
at com.datastax.driver.mapping.ReflectionMapper$LiteralMapper.<init>(ReflectionMapper.java:57)
at com.datastax.driver.mapping.ReflectionMapper$ReflectionFactory.createColumnMapper(ReflectionMapper.java:231)
at com.datastax.driver.mapping.AnnotationParser.convert(AnnotationParser.java:166)
at com.datastax.driver.mapping.AnnotationParser.parseEntity(AnnotationParser.java:109)
at com.datastax.driver.mapping.MappingManager.getMapper(MappingManager.java:148)
at com.datastax.driver.mapping.MappingManager.mapper(MappingManager.java:105)
非常愚蠢的错误。但是错误信息可以是详细的。
任何人看,错误是,我没有将java中的映射转换为<String,>。