-
- Visão geral sobre mapeamento objeto-relacional
Por vários anos a maior dificuldade de se usar a abordagem OO foi a comunicação com o BD Relacional. O BD não é orientado a Objetos ele tem outro paradigma que é o paradigma Relacional, Ou seja quando faziamos um sistema OO com as nossas classes associadas e tudo mais, quando tínhamos que trabalhar com esses objetos no BD o esforço era enorme para programar essa interação entre dois paradigmas diferentes
Quando usávamos o pacote JDBC tinhamos que programar a tradução do BD Relacional para as nossas classes Orientadas a Objetos. Ou seja toda hora tinha que transportar de tabela para Objeto e de Objeto para Tabela.
Antes de Existir as ferramentas de Mapeamento Objeto Relacional a programação era custosa devido essa tradução de Objeto Relacional e vice e versa
-
- Outros problemas que devem ser tratados:
- Contexto de persistência (objetos que estão ou não atrelados a uma conexão em um dado momento)
- Mapa de identidade (cache de objetos já carregados)
- Carregamento tardio (lazy loading)
- Outros
As ferramentas de Objeto Relacional faz automaticamente, ou seja elas vieram para melhorar a comunicação de um Sistema OO com um BD Relacional.
JAVA EE: Java Enterprise Edition é conjunto de especificações e a mais importante é a JPA.
Java Persistence API (JPA) é a especificação padrão da plataforma Java EE (pacote javax.persistence) para mapeamento objeto-relacional e persistência de dados
JPA é apenas uma especificação (JSR 338):
Hibernate é uma das implementações do JPA.
Para trabalhar com JPA é preciso incluir no projeto uma implementação da API (ex: Hibernate e outras).
O JPA é a especificação/interface e o Hibernate é a implementação.
Arquitetura de uma aplicação que utiliza JPA:
Principais classes da JPA:
- EntityManager
https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html
Um objeto EntityManager encapsula uma conexão com a base de dados e serve para efetuar operações de acesso a dados (inserção, remoção, deleção, atualização) em entidades (clientes, produtos, pedidos, etc.) por ele monitoradas em um mesmo contexto de persistência. (instanciar o EntityManger é a grosso modo conectar com o BD )
Escopo: tipicamente mantem-se uma instância única de EntityManager para cada thread do sistema (no caso de aplicações web, para cada requisição ao sistema). Ou seja quando o usuário está utilizando uma aplicação web e ele faz uma requisição essa aplicação vai instanciar um único EntityManager para trabalhar com todos os dados daquela requisição.
- EntityManagerFactory
https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManagerFactory.html
Um objeto EntityManagerFactory é utilizado para instanciar objetos EntityManager.
Escopo: tipicamente mantem-se uma instância única de EntityManagerFactory para toda aplicação.
-
Configure o JPA no seu projeto por meio do arquivo persistence.xml
Crie uma pasta "META-INF" a partir da pasta "resources" Dentro da pasta META-INF crie um arquivo "persistence.xml" Conteúdo do arquivo persistence.xml:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
</properties>
</persistence-unit>
JPA só consegue remover uma instancia que está monitorada, quando ela está detach não é possivel remover.
Objeto monitorado é um objeto que você acabou de inserir, ou um objeto que você buscou do BD .
- JPA
- Hibernate
- Maven