> For the complete documentation index, see [llms.txt](https://pauloricmarinho.gitbook.io/desenvolvimento/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pauloricmarinho.gitbook.io/desenvolvimento/java/hibernate-framework.md).

# Hibernate Framework

Framework Mapeamento Objeto Relacional

![](https://750641972-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGW_meLjEK-3soe8kP%2F-MJr4eVeC4jUQ5_B-OtQ%2F-MJr5coeoc93rMnQiFVg%2Fhibernate.jpg?alt=media\&token=e4eca305-a6ef-466b-a0ec-38f2c6b091af)

O Hibernate é um framework de mapeamento objeto relacional para aplicações Java, ou seja, é uma ferramenta para mapear classes Java em tabelas do banco de dados e vice-versa. É bastante poderoso e dá suporte ao mapeamento de associações entre objetos, herança, polimorfismo, composição e coleções.

O Hibernate não apresenta apenas a função de realizar o mapeamento objeto relacional. Também disponibiliza um poderoso mecanismo de consulta de dados, permitindo uma redução considerável no tempo de desenvolvimento da aplicação.

**A Arquitetura do Hibernate**

A arquitetura do Hibernate é formada por um conjunto de interfaces que são responsáveis por executar operações de criação, exclusão, consulta e atualização no banco de dados, além de uma interface para realizar configuração do Hibernate, interfaces responsáveis por realizar a interação entre os eventos do Hibernate e a aplicaçãoe interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate.

![](https://750641972-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGW_meLjEK-3soe8kP%2F-MJr4eVeC4jUQ5_B-OtQ%2F-MJr5lSiDs5xeHqFpM5T%2Fhibernatearquitetura.png?alt=media\&token=550e3c71-4ff3-4874-99c0-531ed1c6066c)

Além do mapeamento dos objetos relacionais e integração com os bancos de dados o Hibernate interage com APIs já existentes do Java: JTA, JNDI e JDBC.

As principais interfaces do Hibernate são: Session, SessionFactory, Transaction, Query, Configuration. Com essas interfaces conseguimos criar todas as nossas rotinas de banco de dados.

**Interface Session**

Possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes.

**Interface SessionFactory**

Responsável por manter o mapeamento objeto relacional em memória. Permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes.

**Interface Configuration**

É utilizada para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.

**Interface Transaction**

É utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA.

**Interfaces Criteria e Query**

As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.
