Logo

dev-resources.site

for different kinds of informations.

Uma breve introdução ao Hibernate

Published at
9/28/2024
Categories
java
hibernate
sql
jpa
Author
camilaferreiranas
Categories
4 categories in total
java
open
hibernate
open
sql
open
jpa
open
Author
17 person written this
camilaferreiranas
open
Uma breve introdução ao Hibernate

Hibernate é uma ferramenta ORM (Object-Relational Mapping) amplamente utilizada em projetos Java para mapear objetos de uma aplicação para tabelas de um banco de dados relacional.
O ORM é uma ferramenta que facilita o mapeamento entre as classes de um projeto e as entidades de um banco de dados.
Ao usar um framework como o Hibernate o desenvolvedor consegue se concentrar no desenvolvimento do domínio ao invés de se preocupar com os detalhes da persistência.

As principais características do Hibernate são:
1. Transparência no acesso ao dados: O Hibernate permite que os desenvolvedores escrevam código Java que se concentra apenas nos objetos e não nos detalhes de persistência
2. Suporte a transações: Hibernate oferece controle transacional integrado, facilitando a integração com diferentes gerenciadores de transações. Isso garante que as operações de leitura e gravação de dados sejam realizadas de uma forma que a integridade dos dados seja garantida.
3. Controle de herança: Hibernate permite mapear herança entre classes de forma flexível para o banco de dados. Existem diferentes estratégias de mapeamento de herança, como:
Single Table Strategy: Uma única tabela para todas as classes da hierarquia.
Joined Table Strategy: Uma tabela para cada classe concreta.
Table per Class Strategy: Uma tabela para cada classe.
4. Lazy Loading: Hibernate suporta o conceito de lazy loading, onde as coleções e associações de dados são carregadas apenas quando necessário, economizando recursos de memória.
5. Mecanismos de validação: O Hibernate se integra com o Bean Validation, permitindo definir regras de validação para os campos de uma entidade diretamente nas anotações da classe.

O Hibernate é uma das várias implementações da JPA que é uma especificação padrão que define como o ORM deve ser implementado em Java.
Esse framework traz diversos benefícios como a redução de código SQL e JDBC pois o próprio Hibernate gera e executa as consultas automaticamente. Ele também é compatível com uma série de banco de dados relacionais como MySQL, PostgreSQL, MariaDB, etc. O uso de caching e o controle de transações bem definidas ajudam a otimizar a performance da aplicação.
Contudo existem desvantagens no uso de Hibernate como sua curva de aprendizado, embora suas operações mais simples sejam a maioria quando começamos a implementar caching, mapeamento de herança e transações distribuídas podemos enfrentar dificuldades de entendimento num primeiro momento. A abstração oferecida pelo Hibernate também pode adicionar overhead em certas situações, especialmente quando consultas altamente otimizadas são necessárias.

Abaixo podemos ver um exemplo com uma classe Produto e logo abaixo uma explicação sobre algumas das annotations do JPA que são implementadas pelo Hibernate.

`@Entity
@Table(name = "produto")
public class Produto {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private BigInteger id;

@Column(name = "nome_produto", nullable = false)
private String nome;

@Column(name = "descricao_produto")
private String descricao;

@Column(name = "preco_produto", nullable = false)
private BigDecimal preco;

// Getter e Setters
Enter fullscreen mode Exit fullscreen mode

}`

  1. @Entity
    A annotation @Entity indica que a classe Produto é uma entidade JPA. Isso significa que ela será mapeada para uma tabela no banco de dados. Cada instância da classe Produto corresponde a uma linha dessa tabela.
    A classe deve ter um campo com a annotation @id para indicar o identificador único (chave primária) da entidade no banco de dados.

  2. @Table(name = "produto")
    A annotation @Table especifica o nome da tabela no banco de dados à qual essa entidade será mapeada. No exemplo, name = "produto" define que a tabela associada à entidade Produto será chamada "produto". Se a annotation @Table não fosse fornecida, o nome da tabela seria, por padrão, o nome da classe.

  3. @id
    A annotation @id é utilizada para marcar o campo id como a chave primária da entidade. No banco de dados, esse campo será utilizado como o identificador único de cada instância da entidade Produto.

  4. @GeneratedValue(strategy = GenerationType.SEQUENCE)
    A annotation @GeneratedValue indica que o valor do campo id será gerado automaticamente. A propriedade strategy = GenerationType.SEQUENCE especifica que o Hibernate deve usar uma sequência para gerar os valores da chave primária no banco de dados.
    Existem outras estratégias para gerar chaves primárias, como:
    AUTO: Delega a escolha da estratégia ao provedor de persistência (no caso, o Hibernate).
    IDENTITY: Usa uma coluna de identidade do banco de dados, que gera o valor automaticamente durante a inserção.
    TABLE: Usa uma tabela específica para armazenar as chaves primárias.

  5. @Column(name = "nome_produto", nullable = false)
    A annotation @Column mapeia o campo nome da classe para a coluna correspondente no banco de dados. No exemplo, a coluna será chamada "nome_produto".
    O parâmetro nullable = false indica que essa coluna não pode ser nula no banco de dados. Ou seja, é obrigatório que o campo nome tenha um valor.

O Hibernate é uma ferramenta poderosa e flexível para manipulação de dados em aplicações Java, eliminando a necessidade de escrever SQL manualmente. Ele facilita o desenvolvimento de aplicações complexas ao abstrair o mapeamento entre objetos e tabelas do banco de dados e, ao ser compatível com a especificação JPA, oferece uma API padronizada, com a possibilidade de usar funcionalidades avançadas.

jpa Article's
30 articles in total
Favicon
Learn Spring Data JPA, Part - 1
Favicon
Spring Data JPA: Speed Up Development & Business Focus
Favicon
Unidirectional associations for one-to-many
Favicon
Understanding Database Connection Management in Spring Boot with Hibernate and Spring Data JPA
Favicon
Como eu reduzi em até 99% o tempo de resposta da minha API
Favicon
🐾 Hibernate Zoo: Путеводитель по языкам запросов в мире данных 🐾
Favicon
How To Fetch Data By Using DTO Projection In Spring Data JPA
Favicon
Relationships in JPA: Creating Entities Without Dependency
Favicon
Spring Data JPA Stream Query Methods
Favicon
Differences between JpaRepository and CrudRepository and when you need to chose each
Favicon
Understanding JPA Pessimistic Locking vs. Serializable Isolation in Transactions
Favicon
Uma breve introdução ao Hibernate
Favicon
Connecting Spring Boot Applications to a Database with Spring Data JPA
Favicon
Working with Spring Data JPA: CRUD Operations and Beyond
Favicon
The Importance of Using Interfaces for JpaRepository(Java Persistence API) in Spring Data JPA
Favicon
GitHub Mastery: Creating Repositories and Managing PRs with Ease
Favicon
Spring Boot Common Sense: Part 2 Crafting Effective JPA Entities for Robust Data Models
Favicon
Applying JSON Patch to Entity in a Spring Boot Application: A Practical Guide
Favicon
Entendendo @MappedSuperclass em JPA
Favicon
Como iniciar um aplicativo Spring Boot + JPA + MySQL
Favicon
Understanding JPA Mappings in Spring Boot: One-to-One, One-to-Many, Many-to-One, and Many-to-Many Relationships
Favicon
Configurando o Spring com JPA e Microsoft SQL Server
Favicon
Java Hibernate vs JPA: Rapid review for you
Favicon
Database Integration with Spring Boot : Best Practices and Tools
Favicon
what is JPA? explain few configurations
Favicon
Introducing Stalactite ORM
Favicon
How to deal with N+1 problems with Hibernate
Favicon
Jakarta Persistence API (JPA) example application: Northwind sample database
Favicon
spring JPA entities: cheat sheet
Favicon
Java Hibernate vs JPA: Quick Review

Featured ones: