Estava mapeando uma simples classe que possui um campo chamado ATIVO que ira receber o valor de S ou N para identificar SIM ou NAO.
Sendo assim pensei em anota-lo como um @Enumerated(EnumType.STRING) e criar um AtivoEnum para utilizar no projeto.
O problema que ao tentar dar um findall() o java me retorna um erro dizendo que não existe o tipo S para o AtivoEnum.
Procurando na internet vi que algumas pessoas solucionaram esse problema criando um converter dentro enum e mapeando o campo com @Convert ficando com o codigo igual abaixo.
Enum Ativo
public enum AtivoEnum {
SIM("S"), NAO("N");
String valor;
AtivoEnum(String valor){
this.valor = valor;
}
private String getValor(){
return this.valor;
}
@Converter(autoApply = true)
public static class Mapeador implements AttributeConverter<AtivoEnum, String> {
@Override
public String convertToDatabaseColumn(AtivoEnum valor) {
return valor.getValor();
}
@Override
public AtivoEnum convertToEntityAttribute(String valor) {
if(valor.equals("S")) {
return SIM;
} else if (valor.equals("N")){
return NAO;
} else {
return null;
}
}
}
}
Entidade Pais
@Entity
@Data
public class Pais {
@Id
private Integer id;
private String nome;
@Convert(converter = AtivoEnum.Mapeador.class)
private AtivoEnum ativo;
}
Minha duvida no final ficou em saber se essa é a melhor pratica?
Existe uma maneira melhor de trabalhar dessa maneira onde o banco salva S e na aplicação trabalhamos com SIM ?
Ou hoje a melhor pratica seria gravar o nome completo no banco de dados igual ao enum tanto para esse caso quando para os demais como por exemplo de situação de um documento: ABERTO, PENDENTE, FECHADO, CANCELADO ?