Versão ALPHA! Este artigo está em versão 'Alpha' e, portanto, não foi ainda revisado corretamente

Adicionando propriedade código em enums

Introdução

Em alguns momentos quando for preciso gerar o método getInsert() e persistir no banco propriedades do tipo enum, será necessário alterar o construtor do enum para que no processo de inserção seja adicionado um código que represente o enum.

Para este mini-artigo tomar como base o seguinte enum

public enum Periodo {

  MANHA,
  
  NOITE

}

Adicione o construtor no enum

Primeiramente adicione a propriedade codigo e seu respectivo geter ao enum

private String codigo;

public String getCodigo() {
  return this.codigo;
}

Em seguida gere um construtor com modificador private acima do bloco que acabamos de definir

private Periodo(String codigo) {
  this.codigo = codigo;
}

Não se esqueça de alterar os enums, definindo seus respectivos códigos nos valores do enum

  MANHA("M"),
  
  NOITE("N")

Crie o mapa que armazenará o código a seu respectivo enum

Em seguida crie o mapa e o bloco estático que serão responsáveis em armazenar o enum e seu respectivo código, não se esqueça de definir o map com os modificadores final e static

private static final Map<String, Periodo> codigoMap;

static {
  Map<String, Periodo> map = newHashMap();

  for (Periodo tipo : values()) {
    String codigo = tipo.getCodigo();
    map.put(codigo, tipo);
  }

  codigoMap = ImmutableMap.copyOf(map);
}

Crie o método que captura o enum pelo seu código

Crie o método que será responsável em capturar o enum dado o seu código, lembrando que o mesmo deve ser marcado como static

public static Periodo load(String codigo) {
  codigoMap.get(codigo);
}

Persistindo entidades que utilizam o enum Periodo

Como fora dito anteriormente estas alterações são realizadas para o processo de inserção de propriedades do tipo enum no banco de dados, atente ao processo de inserção de uma entidade que utiliza o enum Periodo

public Insert getInsert() {
  return Insert.into("ESCOLA.ALUNO")
    .value("NOME", nome)
    .value("PERIODO", periodo.getCodigo())
    
    .onGeneratedKey(new GeneratedKeyCallback() {
      @Override
      public void set(ResultSet rs) throws SQLException {
        int id = rs.next() ? rs.getInt(1) : 0;
        setId(id);
      }
    });
  
}

Resultado final

Atente ao resultado final (refatoração do enum Periodo)

public enum Periodo {

  MANHA("M"),

  NOITE("N");

  private static final Map<String, Principal> codigoMap;

  static {
    Map<String, Periodo> map = newHashMap();

    for (Periodo tipo : values()) {
      String codigo = tipo.getCodigo();
      map.put(codigo, tipo);
    }

    codigoMap = ImmutableMap.copyOf(map);
  }

  private final String codigo;

  private Periodo(String codigo) {
    this.codigo = codigo;
  }

  public static Periodo load(String codigo) {
    return codigoMap.get(codigo);
  }

  public String getCodigo() {
    return codigo;
  }

}

 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br