У меня есть перечисление с внутренним значением:
public enum Test {
A("a");
private String value;
Test(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
}
И я использую его как параметр в Spring Data Cassandra @Query. Также я добавил конвертер чтения и записи только для разбора "a" -> A и обратно. Я ожидал, что если я отправлю A в качестве параметра, запрос будет сгенерирован конвертерами. Но запрос был похож на «... my_enum = 'A'» вместо «a».
Я пытался отладить источники Spring и нашел эту часть кода org/springframework/data/spring-data-cassandra/1.5.9.RELEASE/spring-data-cassandra-1.5.9.RELEASE-sources.jar!/org/ springframework/data/cassandra/convert/MappingCassandraConverter.java:799:
// Cassandra has no default enum handling - convert it either to string
// or - if requested - to a different type
if (Enum.class.isAssignableFrom(value.getClass())) {
if (requestedTargetType != null && !requestedTargetType.isEnum()
&& getConversionService().canConvert(value.getClass(), requestedTargetType)) {
return getConversionService().convert(value, requestedTargetType);
}
return ((Enum<?>) value).name();
}
Похоже, если параметр enum - конвертеры никогда не будут использоваться. Как я могу справиться с этим? Спасибо.
A.toSring()
вместо всехA
. Но я предполагаю, что вы ищете более автоматический способ преобразования... - person Jos   schedule 24.01.2018