Enum Java Hibernate
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.
Última atualização em: | 12014 Visualizações
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!
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.