Como mapear uma entidade no Hibernate?

O mapeamento de entidades no Hibernate é feito com anotações JPA, permitindo converter classes Java em tabelas de banco de dados automaticamente.

Como mapear uma entidade no Hibernate?

O Hibernate usa JPA (Java Persistence API) para mapear classes Java em tabelas do banco de dados. Esse mapeamento permite persistir objetos diretamente no banco, sem necessidade de escrever SQL manualmente.

1. Criando uma Classe de Entidade no Hibernate

O primeiro passo para mapear uma entidade é usar anotações JPA para definir a relação entre a classe Java e a tabela do banco.

import javax.persistence.*;

@Entity // Define que a classe é uma entidade JPA
@Table(name = "usuarios") // Nome da tabela no banco
public class Usuario {
    @Id // Define a chave primária
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Auto incremento
    private Long id;

    @Column(nullable = false, length = 100) // Configura a coluna no banco
    private String nome;

    @Column(unique = true, nullable = false)
    private String email;

    // Getters e Setters
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getNome() { return nome; }
    public void setNome(String nome) { this.nome = nome; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

Explicação:

  • @Entity: Marca a classe como uma entidade do Hibernate.
  • @Table(name = "usuarios"): Define o nome da tabela no banco.
  • @Id @GeneratedValue(strategy = GenerationType.IDENTITY): Define a chave primária como auto incremento.
  • @Column(nullable = false, length = 100): Configura propriedades da coluna (obrigatória e tamanho máximo).

2. Configurando o Hibernate (persistence.xml)

Criamos um arquivo persistence.xml para configurar o Hibernate.

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
    <persistence-unit name="meuPU">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/meubanco"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

Explicação:

  • hibernate.hbm2ddl.auto=update: Atualiza automaticamente a estrutura das tabelas.
  • hibernate.show_sql=true: Exibe as queries SQL no console.

3. Criando uma Classe DAO para Persistência

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class UsuarioDAO {
    private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("meuPU");

    public static void salvar(Usuario usuario) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        em.persist(usuario);
        em.getTransaction().commit();
        em.close();
    }
}

Explicação:

  • persist(usuario): Insere o objeto no banco de dados.
  • begin() e commit(): Controlam a transação.
  • EntityManagerFactory: Gerencia as conexões com o banco.

4. Criando um Relacionamento entre Entidades

Para criar relacionamentos entre tabelas, usamos anotações JPA como @OneToMany, @ManyToOne, @OneToOne e @ManyToMany.

Exemplo: Um Usuário Pode Ter Vários Pedidos

import javax.persistence.*;
import java.util.List;

@Entity
@Table(name = "pedidos")
public class Pedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne // Muitos pedidos para um usuário
    @JoinColumn(name = "usuario_id", nullable = false)
    private Usuario usuario;

    private Double total;

    // Getters e Setters
}

Explicação:

  • @ManyToOne: Vários pedidos pertencem a um único usuário.
  • @JoinColumn(name = "usuario_id"): Define a chave estrangeira.

5. Consultando Registros com Hibernate

Para buscar um usuário pelo ID, usamos:

public class UsuarioDAO {
    public static Usuario buscarPorId(Long id) {
        EntityManager em = emf.createEntityManager();
        Usuario usuario = em.find(Usuario.class, id);
        em.close();
        return usuario;
    }
}

Explicação: find(Usuario.class, id) recupera o objeto com base na chave primária.

6. Benefícios do Mapeamento de Entidades no Hibernate

Benefício Descrição
Menos código SQL Trabalha diretamente com objetos Java.
Facilidade de manutenção Código mais organizado e modular.
Suporte a diferentes bancos Permite trocar de banco sem modificar código.
Otimização automática Hibernate gerencia cache e consultas.
Relacionamentos mapeados Facilita operações entre tabelas.

Conclusão

O mapeamento de entidades no Hibernate permite converter classes Java em tabelas de banco de forma automática, simplificando a persistência de dados. Ao usar anotações JPA e boas práticas, é possível criar um sistema robusto, escalável e fácil de manter.

No mundo do desenvolvimento Java, o mapeamento de entidades é um dos pilares para a persistência de dados eficiente. O Hibernate simplifica esse processo, eliminando a necessidade de escrever SQL manualmente e garantindo que os objetos Java sejam armazenados corretamente no banco de dados.

Algumas aplicações:

  • Criação de APIs REST com persistência de dados
  • Desenvolvimento de sistemas empresariais baseados em banco de dados
  • Integração de aplicações Java com bancos de dados relacionais
  • Automatização de CRUDs em aplicações web

Dicas para quem está começando

  • Use @Entity para definir entidades no Hibernate
  • Configure corretamente o persistence.xml
  • Evite carregar muitos registros na memória, use paginação
  • Utilize @ManyToOne e @OneToMany para definir relacionamentos
  • Teste sempre as consultas para garantir eficiência

Contribuições de Rodrigo Farias

Compartilhe este tutorial: Como mapear uma entidade no Hibernate

Compartilhe este tutorial

Continue aprendendo:

Qual a diferença entre JDBC e JPA

JDBC e JPA são tecnologias para acesso a banco de dados em Java, sendo JDBC uma API de baixo nível e JPA um framework de alto nível que simplifica a persistência de dados.

Tutorial anterior

Como evitar problemas de lazy loading no Hibernate

O lazy loading no Hibernate pode causar problemas ao acessar dados de relacionamentos fora do contexto da sessão. Veja como evitá-los de forma eficiente.

Próximo tutorial