【问题标题】:Cassandra + spring dataCassandra + 弹簧数据
【发布时间】:2018-06-04 15:47:37
【问题描述】:

我正在使用 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]

【问题讨论】:

  • 请改进您的问题以明确您的实际问题?

标签: java cassandra spring-data spring-data-cassandra


【解决方案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> 

依赖pom

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

【讨论】:

  • 它工作得很好,但也许是我没有正确表达自己的错,这不是我所需要的。当然,如果可能的话,我需要使用 ReactiveCrudRepository。非常感谢您的回答。
猜你喜欢
  • 2019-05-03
  • 1970-01-01
  • 2012-08-03
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多