JPA vs Hibernate
Quase todos os aplicativos corporativos são necessários para acessar bancos de dados relacionais regularmente. Mas um problema enfrentado pelas tecnologias anteriores (como JDBC) era a incompatibilidade de impedância (diferença entre tecnologias orientadas a objetos e relacionais). Uma solução para esse problema foi introduzida através da introdução de uma camada abstrata chamada camada de persistência, que encapsula o acesso ao banco de dados a partir da lógica de negócios. JPA (Java Persistence API) é uma estrutura dedicada ao gerenciamento de dados relacionais (usando a camada de persistência) em aplicativos Java. Existem muitas implementações de JPA de fornecedores usadas na comunidade de desenvolvedores Java. O Hibernate é a implementação mais popular da JPA (DataNucleus, EclipseLink e OpenJPA são alguns outros). A versão mais recente do JPA (JPA 2.0) é totalmente suportada pelo Hibernate 3.5, lançado em março de 2010.
O que é JPA?
O JPA é uma estrutura para gerenciar dados relacionais para Java. Ele pode ser usado com aplicativos que utilizam JSE (Java Platform, Standard Edition) ou JEE (Java Platform, Enterprise Edition). Sua versão atual é o JPA 2.0, lançada em 10 de dezembro de 2009. O JPA substituiu os beans de entidade EJB 2.0 e EJB 1.1 (que foram fortemente criticados por serem pesados pela comunidade de desenvolvedores Java). Embora os beans de entidade (no EJB) fornecessem objetos de persistência, muitos desenvolvedores estavam acostumados a utilizar objetos relativamente leves oferecidos pelo DAO (Data Access Objects) e outras estruturas semelhantes. Como resultado, o JPA foi introduzido e capturou muitos dos recursos interessantes das estruturas mencionadas acima.
A persistência, conforme descrito no JPA, abrange a API (definida em javax.persistence), JPQL (Java Platform, Enterprise Edition) e metadados necessários para objetos relacionais. O estado de uma entidade de persistência geralmente é persistido em uma tabela. Instâncias de uma entidade correspondem a linhas da tabela do banco de dados relacional. Os metadados são usados para expressar os relacionamentos entre entidades. Anotações ou arquivos descritores XML separados (implantados com o aplicativo) são usados para especificar metadados nas classes de entidades. O JPQL, que é semelhante às consultas SQL, é usado para consultar entidades armazenadas.
O que é o Hibernate?
O Hibernate é uma estrutura que pode ser usada para mapeamento objeto-relacional destinado à linguagem de programação Java. Mais especificamente, é uma biblioteca ORM (mapeamento objeto-relacional) que pode ser usada para mapear o modelo objeto-relacional no modelo relacional convencional. Em termos simples, ele cria um mapeamento entre classes e tabelas Java em bancos de dados relacionais, também entre tipos de dados Java para SQL. O Hibernate também pode ser usado para consulta e recuperação de dados, gerando chamadas SQL. Portanto, o programador é dispensado do manuseio manual de conjuntos de resultados e da conversão de objetos. O Hibernate é lançado como uma estrutura livre e de código aberto distribuída sob licença GNU. Uma implementação para a API JPA é fornecida no Hibernate 3.2 e versões posteriores. Gavin King é o fundador do Hibernate.
Qual é a diferença entre JPA e Hibernate?
O JPA é uma estrutura para gerenciar dados relacionais em aplicativos Java, enquanto o Hibernate é uma implementação específica do JPA (portanto, idealmente, o JPA e o Hibernate não podem ser comparados diretamente). Em outras palavras, o Hibernate é uma das estruturas mais populares que implementam o JPA. O Hibernate implementa o JPA através das bibliotecas Hibernate Annotation e EntityManager que são implementadas no topo das bibliotecas do Hibernate Core. EntityManager e Anotações seguem o ciclo de vida do Hibernate. A versão mais recente do JPA (JPA 2.0) é totalmente suportada pelo Hibernate 3.5. O JPA tem o benefício de ter uma interface padronizada, para que a comunidade de desenvolvedores esteja mais familiarizada com ela do que o Hibernate. Por outro lado, as APIs nativas do Hibernate podem ser consideradas mais poderosas porque seus recursos são um superconjunto do JPA.