有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Cassandra+spring数据

我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为frozen<map<text, list<text>>>

表脚本:

create table IF NOT EXISTS test (
id varchar,
name varchar,
target frozen<map<text, list<text>>>,
primary key (id, name)

我做了这样的东西:

@Column("target")
@CassandraType(type = DataType.Name.MAP, typeArguments = arrayOf( DataType.Name.MAP))   
Map<String, List<String>> target;

但是得到错误:

Codec not found for requested operation: [list <-> java.util.List]; nested exception is
com.datastax.driver.core.exceptions.CodecNotFoundException:
Codec not found for requested operation: [list <-> java.util.List]


共 (1) 个答案

  1. # 1 楼答案

    请删除@CassandraType注释并添加驱动程序映射依赖项

    用户模型

    @Table(keyspace = "test_space", name = "user")
    public class User {
    
        @PartitionKey
        private int id;
    
        @Column
        private String name;
    
        @Column
        private Map<String, List<String>> tags;
    
    }
    

    主要方法

    public void run(String... args) throws Exception {
        Cluster cluster = Cluster.builder().addContactPoints("127.0.0.1").build();
        Session session = cluster.connect("test_space");
        MappingManager manager = new MappingManager(session);
        Mapper<User> userMapper = manager.mapper(User.class);
        System.out.println(userMapper.get(2));
        session.close();
        cluster.close();
    }
    

    输出

    User{id=2, name='user', tags={test=[test], tester=[one, two]}}
    

    表数据

    cqlsh:test_space> SELECT * FROM user ;
    
     id | name | tags
      +   +                       
      2 | user | {'test': ['test'], 'tester': ['one', 'two']}
    
    (1 rows)
    cqlsh:test_space> 
    

    依赖性聚甲醛

        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-mapping</artifactId>
            <version>3.0.0</version>
        </dependency>