Может ли Java Cassandra 4.x mapper преобразовать перечисление в int?

#java #cassandra

#java #кассандра

Вопрос:

У меня есть действительно простое перечисление

 public enum Axis {
  X, Y, Z;
}
  

Раньше я использовал EnumOrdinalCodec драйвер 3.x для сохранения этого int в базе данных. С 4.x я получаю сообщение об ошибке

CQL ks.table: [snip], определенный в классе объектов: [snip], объявляет сопоставления типов, которые не поддерживаются реестром кодеков: Поле: axis, тип объекта: [snip].Axis, тип CQL: INT

Я не могу найти никаких аннотаций, которые можно использовать, чтобы указать драйверу, как сопоставить перечисление. Кажется, что единственный хук, MapperResultProducer который я не могу понять и не могу найти примеров.

Есть ли лучший способ, чем вручную сопоставить перечисление с его порядковым номером?

Ответ №1:

Эта функциональность была восстановлена, начиная с драйвера Java 4.8 — появился новый ExtraTypeCodecs класс, содержащий дополнительные кодеки. Вам нужно будет использовать кодек, возвращаемый функцией ExtraTypeCodecs.enumOrdinalsOf(Class) . (но посмотрите комментарий там, что лучше не использовать это, потому что число может измениться, если вы неправильно измените свое перечисление)