#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)
. (но посмотрите комментарий там, что лучше не использовать это, потому что число может измениться, если вы неправильно измените свое перечисление)