2017-12-21 7 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注釈を削除し、ドライバのマッピングの依存関係を追加してください

Userモデル

@Table(keyspace = "test_space", name = "user") 
public class User { 

    @PartitionKey 
    private int id; 

    @Column 
    private String name; 

    @Column 
    private Map<String, List<String>> tags; 

} 

のmainメソッド

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 を使用する必要があります。 大変お返事ありがとうございます。 –

関連する問題