2017-12-21 4 views
2

그 카산드라 유형 인에 frozen<map<text, list<text>>>카산드라 + 스프링 나는 스프링 데이터 카산드라를 사용하여 JPA를 사용하여 필드를 매핑 할 필요가있어 데이터

테이블 스크립트를

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]

+0

귀하의 질문에 당신이 실제로 요구하는지 명확하게 개선하세요? – mp911de

답변

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> 
+0

그것은 완벽하게 작동하지만 내 자신의 잘못은 정확하게 표현하지 못하기 때문에 내가 원하는 것이 아닙니다. 가능한 경우 ReactiveCrudRepository 을 사용해야합니다. Tankyou 대단히 답을. –

관련 문제