使用datastax对象映射器映射list / set / map类型的列

时间:2015-08-11 10:48:30

标签: java cassandra datastax-java-driver

我正在尝试使用datastax mapper,它对所有原始类型都运行良好。

我在使用cassandra表中的Map type列时遇到问题。 可能的问题还在于列的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>

以下是我如何定义使用datastax mapper

映射到表的vo
@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)

1 个答案:

答案 0 :(得分:1)

非常愚蠢的错误。 但错误信息可能很复杂。

任何人都在寻找,错误的是,我没有将java中的地图转换为&lt; String,String&gt ;.