2016-12-15 1 views
1

J'ai une colonne info map<text, frozen<list<text>>> à cassandra. Essayer de récupérer ces données cartographiques dans Java à partir du code ci-dessous.Comment faire correspondre codec pour la liste cassandra <varchar><-> java.util.List

for (Row row : conn.getSession().execute("SELECT info FROM demo.variants where chr = '" +chr + "' and pos = " + pos)) { 
    Map<String, List> map = row.getMap("info", String.class, List.class); 
    System.out.println(map); 
} 

Quand vous faites de cette façon, je reçois l'erreur

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

Je ne pouvais pas comprendre comment résoudre cette exception codec de type imbriqué. Quels sont les moyens de résoudre cela?

Répondre

3

Je recommande d'utiliser la méthode utilitaire TypeTokens.listOf(TypeToken) pour créer un TypeToken<List<String>> et l'utiliser comme le type d'élément pour récupérer la carte, i.e. .:

Map<String, List<String>> info = row.getMap("info", TypeToken.of(String.class), TypeTokens.listOf(String.class));