Кодек данных кассандры не найден varchar <-> java.util.Map - PullRequest
0 голосов
/ 31 октября 2019

мы использовали dse-драйвер 1.8.2 в нашем коде, у меня есть сущность, определенная как:

public class HistoryByEmail implements Serializable {
  ...
  @Column(name = ADDITIONAL_DATA)
  private Map<String, String> additionalData;
}

, когда я попытался прочитать значение из этого столбца, я получил эту ошибку:

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [varchar <-> java.util.Map<java.lang.String, java.lang.String>]

я добавил кодек в этот столбец:

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.MapCodec.class)
  private Map<String, String> additionalData;

, но код не будет скомпилирован, также пробовал следующий подход, ни один из них не работает:

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.AbstractMapCodec<String, String>.class)
  private Map<String, String> additionalData;

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.AbstractMapCodec<>.class)
  private Map<String, String> additionalData;

1 Ответ

0 голосов
/ 01 ноября 2019

Из ошибки видно, что соответствующий столбец имеет тип text, а не map<text, text> - либо измените определение таблицы, либо измените тип переменной.

Может быть, у вас есть строка JSON вместо реальной карты Кассандры? В этом случае вы можете использовать один из существующих кодеков JSON .

...