卡桑德拉+弹簧数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卡桑德拉+弹簧数据相关的知识,希望对你有一定的参考价值。

我正在使用spring-data-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;

但得到错误:

找不到请求操作的编解码器:[list < - > java.util.List];嵌套异常是 com.datastax.driver.core.exceptions.CodecNotFoundException: 找不到请求操作的编解码器:[list < - > java.util.List]

答案

请删除@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> 

依赖pom

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

以上是关于卡桑德拉+弹簧数据的主要内容,如果未能解决你的问题,请参考以下文章

登录成功后向片段或页面传递数据

websocket弹簧启动设置

如何将排序添加到弹簧数据弹性搜索

卡桑德拉还是 SOLR?是啥为前端读取查询提供了更好的性能?

使用昆德拉 ORM 编写 Cassandra 的性能

如何在datastax中实现rdd.bulkSaveToCassandra