Olá,
Estou em um projeto utilizando spring boot, tentando fazer a persistencia de um enum, só que salvando o valor usando o id do enum no elasticsearch. Entretanto não consigo encontrar uma forma de fazer
um converter. Tentei colocar usar a anotação converter mas parece que o funcionamento dele serve para o JPA mas não para o elastic.
import java.util.stream.Stream;
public enum MeuEnum {
VALOR_A(1),
VALOR_B(2);
private final Integer valor;
MeuEnum(Integer valor) {
this.valor = valor;
}
public Integer getValor() {
return valor;
}
public static MeuEnum of(Integer valor) {
return Stream.of(values()).filter(e -> valor.equals(e.valor)).findFirst().orElse(null);
}
}
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class MeuEnumConverter implements AttributeConverter<MeuEnum, Integer> {
@Override
public String convertToDatabaseColumn(MeuEnum value) {
if (value != null) {
return value.getValor();
}
return null;
}
@Override
public MeuEnum convertToEntityAttribute(String value) {
if (value != null) {
return MeuEnum.of(value);
}
return null;
}
}
Eu tinha feito essa classe de converter, mas parece que quando usa o ElasticsearchCrudRepository, não faz a conversão. Já se uso o repositorio do JPA é feito a conversão normalmente.
Como eh esse ElasticsearchCrudRepository
?
É uma interface parecido com o JPA repository, mas ele faz consultas NOSQL para o elastic.
Essa é a documentação da interface
Achei isso na documentação: 18. Meta Model Object Mapping. Nessa parte tem isso:
The Metamodel based approach uses domain type information for reading/writing from/to Elasticsearch. This allows to register Converter
instances for specific domain type mapping.
E depois, tem isso: 18.3. Custom Conversions
Nâo parece ser tão elegante quanto o converter do JPA, mas talvez resolva seu problema.