Enum Java Hibernate

Postado em por Wolmir Cezer Garbin em Java | 165 Visualizações
Última atualização em:

Se está começando a trabalhar com objeto relacional e tem dúvidas de como mapear um enum em suas entidades, este post vai te ajudar.

Para se trabalhar com enum para mapeamentos no hibernate é simples e deve ser utilizado a anotação @Enumeration, vou explicar passo a passo como fazer.

É muito comum encontrar situações que é necessário armazenar valores enumerados no Banco de Dados utilizando Objeto Relacional e Hibernate. Para este exemplo utilizaremos a tabela de PESSOA no MySql, o qual segue o script para criação.

CREATE TABLE PESSOA (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NOME` varchar(45) NOT NULL,
  `SEXO` varchar(1) NOT NULL,
  PRIMARY KEY (`ID`)
)

Após criar a tabela, podemos iniciar o nosso mapeamento da entidade, considerando que o enum correspondente a coluna SEXO, veja o código do enum:

public enum Sexo {
	
	M, // masculino
	F; // feminino 

}

Agora vamos criar nossa classe que corresponde a tabela de PESSOA, veja:

public class Pessoa {

    private Integer id;
    private String nome;
    private String sexo;
 
    // [...] getters and setters
}

Mapeando o enum

Tendo a tabela e a classe criada, agora precisamos mapear corretamente a nossa classe.

A primeira coisa que precisamos fazer é mudar a coluna sexo para utilizar o enum, então teremos nossa classe da seguinte forma:

private Sexo sexo;

No hibernate temo duas formas de mapear um enum em uma classe, a primeira delas é pelo número do enumeration, o qual não recomendo pois se mudar a ordem pode gerar confusão e pelo name do enum que será o que utilizaremos neste exemplo, o qual vai gravar M ou F na coluna sexo no banco de dados, então teremos a seguinte estrutura:

import javax.persistence.*;

public class Pessoa {

    private Integer id;
    private String nome;

    @Enumerated(EnumType.STRING)
    private Sexo sexo;
 
    // [...] getters and setters
}

Concluindo o mapeamento da classe

Agora o que precisamos fazer é finalizar o mapeamento normal da classe, deixando a classe final da seguinte forma:

import javax.persistence.*;

@Entity
@Table(name = "PESSOA")
public class Pessoa {

    @Id
    @Column(name = "ID")
    private Integer id;

    @Column(name = "NOME")
    private String nome;

    @Column(name = "SEXO")
    @Enumerated(EnumType.STRING)
    private Sexo sexo;
 
    // [...] getters and setters
}

Note que todas as importações são do javax.persistence.*.

Temos dessa forma o campo sexo sendo representado pelo valor do enum, ainda se precisar de informações mais detalhadas do enum (por exemplo, mostrar uma label para o usuário selecionar o sexo do usuário no formulário), podemos incrementar o enum sem perder sua funcionalidade, veja como podemos deixar o enum Sexo:

public enum Sexo {

    M("Masculino"), // masculino
	F("Feminino"); // feminino
    
    private String label;
    
    private Sexo(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

Qualquer dúvida deixe nos comentários!

Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Posts relacionados


Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar