java - new - hibernate sourceforge




Qual é a diferença entre o JPA e o Hibernate? (15)

Eu tento explicar em palavras muito fáceis.

Suponha que você precisa de um carro como todos sabemos que são vários fabricante de classe A como MERCEDES, BMW, AUDI etc.

Agora na declaração acima CAR (é uma especificação) como cada carro tem características comuns como coisa com 4 rodas e pode ser conduzido na estrada é carro ... por isso é como JPA. E MERCEDES, BMW, AUDI, etc estão apenas usando recurso de carro comum e adicionando funcionalidade de acordo com sua base de clientes para que eles estão implementando a especificação do carro como hibernate, iBATIS etc.

Então, por esses recursos comuns, o jpa e o hibernate são apenas uma implementação de acordo com a necessidade do jboss.

Mais uma coisa

O JPA inclui algumas propriedades básicas, portanto, no futuro, se você quiser alterar o modo de hibernação para qualquer outra implementação, você pode alternar facilmente sem dor de cabeça e para essas propriedades básicas inclui anotações JPA que podem funcionar para qualquer tecnologia de implementação, consultas JPQL.

Então, principalmente, nós implementamos o hibernate com tecnologia de tipo JPA apenas para o caso de querermos mudar nossa implementação de acordo com a necessidade do cliente e você escreverá menos código, já que alguns recursos comuns estão envolvidos no JPA. Se alguém ainda não estiver claro, então você pode comentar como im novo no estouro de pilha.

Obrigado

Eu entendo que o JPA 2 é uma especificação e o Hibernate é uma ferramenta para o ORM. Além disso, eu entendo que o Hibernate tem mais recursos que o JPA 2. Mas do ponto de vista prático, qual é a diferença?

Tenho experiência com o iBatis e agora estou tentando aprender o Hibernate ou o JPA2. Eu peguei o livro Pro JPA2 e ele continua se referindo a "provedor JPA". Por exemplo:

Se você acha que um recurso deve ser padronizado, fale e solicite ao seu provedor de JPA

Isso me confunde, então tenho algumas perguntas:

  • Usando apenas o JPA2, posso buscar dados do banco de dados simplesmente anotando meus POJOs
  • O JPA2 deve ser usado com um "provedor JPA", por exemplo, o TopLink ou o Hibernate? Em caso afirmativo, qual é o benefício de usar o JPA2 + Hibernate em comparação com o JPA2 sozinho ou comparado ao Hibernate sozinho?
  • Você pode recomendar um bom livro JPA2 prático? "Pro JPA2" parece mais uma bíblia e referência em JPA2 (não entra em consultas até a metade posterior do livro). Existe um livro que usa uma abordagem de problema / solução para o JPA2?

Algumas coisas são muito difíceis de entender sem uma perspectiva histórica da linguagem e compreensão do JCP.

Freqüentemente existem terceiros que desenvolvem pacotes que executam uma função ou preenchem uma lacuna que não faz parte do JDK oficial. Por várias razões, essa função pode se tornar parte do Java JDK através do JCP (Java Community Process)

O Hibernate (em 2003) forneceu uma maneira de abstrair o SQL e permitir que os desenvolvedores pensem mais em termos de objetos persistentes (ORM). Você notifica o hibernate sobre seus objetos Entity e gera automaticamente a estratégia para persisti-los. O Hibernate forneceu uma implementação para fazer isso e a API para conduzir a implementação através de configuração XML ou anotações.

A questão fundamental agora é que seu código se torna fortemente acoplado a um fornecedor específico (Hibernate) para o que muita gente achava que deveria ser mais genérico. Daí a necessidade de uma API genérica de persistência.

Enquanto isso, o JCP com muita contribuição do Hibernate e de outros fornecedores de ferramentas ORM estava desenvolvendo o JSR 220 (Java Specification Request), que resultou no JPA 1.0 (2006) e, eventualmente, no JSR 317, que é o JPA 2.0 (2009). Estas são especificações de uma API de Persistência Java genérica. A API é fornecida no JDK como um conjunto de interfaces para que suas classes possam depender da javax.persistence e não se preocupar com o fornecedor específico que está fazendo o trabalho de persistir seus objetos. Esta é apenas a API e não a implementação. O Hibernate agora se torna um dos muitos fornecedores que implementam a especificação JPA 2.0. Você pode codificar para o JPA e escolher qualquer fornecedor de ORM compatível que atenda às suas necessidades.

Há casos em que o Hibernate pode fornecer recursos que não estão codificados no JPA. Nesse caso, você pode optar por inserir uma anotação específica do Hibernate diretamente em sua classe, já que o JPA não fornece a interface para fazer isso.

Fonte: http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/


Do Wiki .

Motivação para criar a API Java Persistence

Muitos desenvolvedores Java corporativos usam objetos persistentes leves fornecidos por estruturas de código aberto ou Data Access Objects em vez de beans de entidade: beans de entidade e beans corporativos tinham a reputação de serem muito pesados ​​e complicados, e só podiam ser usados ​​em servidores de aplicativos Java EE. Muitos dos recursos das estruturas de persistência de terceiros foram incorporados à API Java Persistence e, a partir de 2006, projetos como o Hibernate (versão 3.2) e o OpenLink Essentials TopLink Essentials tornaram-se implementações da Java Persistence API.

Conforme informado na página JCP, o link do Eclipse é a implementação de referência para o JPA. Olhe para esta resposta para um pouco mais sobre isso.

O próprio JPA possui recursos que compensarão um framework ORM padrão. Como o JPA faz parte da especificação do Java EE, você pode usar o JPA sozinho em um projeto e ele deve funcionar com qualquer servidor compatível com Java EE . Sim, esses servidores terão as implementações para a especificação JPA.

O Hibernate é o framework ORM mais popular, uma vez que o JPA foi introduzido, o hibernate está em conformidade com as especificações do JPA . Além do conjunto básico de especificação que deve seguir hibernar fornece todo o lote de coisas adicionais.


Enquanto o JPA é a especificação, o Hibernate é o provedor de implementação que segue as regras ditadas na especificação.


JPA é Java Persistence API. Qual Especifica somente as especificações para APIs. Significa que o conjunto de regras e diretrizes para criar as APIs. Se diz outro contexto, é um conjunto de padrões que fornece o wrapper para criar essas APIs, pode ser usado para acessar o objeto de entidade do banco de dados. O JPA é fornecido pelo oracle. Quando vamos fazer o acesso ao banco de dados, definitivamente precisamos de sua implementação. Significa JPA especifica apenas diretrizes para implementar APIs. O Hibernate é um provedor / fornecedor de JPA responsável por implementar essas APIs. Como o Hibernate TopLink e o Open JPA são alguns exemplos de provedores de JPA API. Portanto, usamos APIs padrão especificadas pela JPA por meio de hibernação.


JPA é a dança, Hibernate é a dançarina.


JPA é uma especificação da API Java que descreve o gerenciamento de dados relacionais em aplicativos usando a Plataforma Java. onde como o Hibernate é uma biblioteca ORM (Object Relational Mapping) que segue a especificação JPA.

Você pode pensar no JPA como um conjunto de regras que é implementado pelo Hibernate.



JPA ou Java Persistence API é uma especificação padrão para implementações de ORM, enquanto o Hibernate é a implementação ou estrutura real de ORM.


Java - sua independência não é apenas do sistema operacional, mas também do fornecedor.

Portanto, você deve conseguir implantar seu aplicativo em diferentes servidores de aplicativos. O JPA é implementado em qualquer servidor de aplicativos compatível com Java EE e permite a troca de servidores de aplicativos, mas a implementação também está mudando. Um aplicativo do Hibernate pode ser mais fácil de implantar em um servidor de aplicativos diferente.


O JPA é apenas uma especificação que precisa de implementação concreta. A implementação padrão do Oracle oracle é "Eclipselink" agora. (Toplink é doado pela Oracle para a fundação Eclipse para se fundir com eclipselink)

(Referência: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

Usando o Eclipseelink, pode-se ter certeza de que o código é portável para qualquer implementação, se necessário. O Hibernate também é uma implementação completa do JPA + MORE (Sort of JPA Plus). O Hibernate é um super conjunto de JPA com alguma funcionalidade específica extra do Hibernate. Portanto, o aplicativo desenvolvido no Hibernate pode não ser compatível ao ser alternado para outra implementação. Ainda hibernate é a escolha da maioria dos desenvolvedores como implementação de JPA e amplamente utilizada.

Outra implementação do JPA é o OpenJPA (openjpa.apache.org), que é uma extensão da implementação do Kodo.


O JPA é apenas uma especificação que precisa de implementação concreta. A implementação padrão fornecida pelo oracle é "Eclipselink" agora. O Toplink é doado pela Oracle para a fundação Eclipse para se fundir com eclipselink.

Usando o Eclipseelink, pode-se ter certeza de que o código é portável para qualquer implementação, se necessário. O Hibernate também é uma implementação completa do JPA + MAIS. O Hibernate é um super conjunto de JPA com alguma funcionalidade específica extra do Hibernate. Portanto, a aplicação desenvolvida no Hibernate pode não ser compatível quando mudada para outra implementação. Ainda hibernate é a escolha da maioria dos desenvolvedores como implementação de JPA e amplamente utilizada.

Outra implementação do JPA é o OpenJPA, que é uma extensão da implementação do Kodo.

JPA vs Hibernate


O JPA é apenas uma especificação. No mercado, existem muitos fornecedores que implementam o JPA. Diferentes tipos de fornecedores implementam o JPA de maneira diferente. Assim, diferentes tipos de fornecedores oferecem funcionalidades diferentes, então escolha um fornecedor adequado com base em suas necessidades.

Se você estiver usando o Hibernate ou quaisquer outros fornecedores em vez de JPA do que você não pode facilmente mover para o Hibernate para EclipseLink ou OpenJPA para Hibernate.Mas se você estiver usando JPA que você apenas tem que alterar o arquivo XML persistência.So a migração é facilmente possível em JPA.


O JPA é uma API, que o Hibernate implementa. O Hibernate é anterior ao JPA. Antes do JPA, você escreve o código de hibernação nativo para fazer o seu ORM. JPA é apenas a interface, agora você escreve o código JPA e precisa encontrar uma implementação. O Hibernate é uma implementação.

Então suas escolhas são: hibernar, toplink, etc ...

A vantagem do JPA é que ele permite que você troque sua implementação, se necessário. A desvantagem é que a API nativa hibernate / toplink / etc ... pode oferecer funcionalidades que a especificação JPA não suporta.


JPA: é como uma interface e não tem implementação concreta para usar funções que existem no JPA.

Hibernate: é apenas um provedor JPA que possui a implementação das funções no JPA e pode ter algumas funções extras que podem não estar presentes no JPA.

DICA: você pode usar

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

Combo 1 : é usado quando você sente que o seu hibernate não está dando melhor desempenho e quer mudar o JPA Provider quando você não tiver que escrever seu JPA mais uma vez. Você pode escrever outro Provedor JPA ... e pode mudar quantas vezes puder.

Combo 2 : é usado muito menos como quando você não está mudando seu provedor JPA a qualquer custo.

Visite http://blog-tothought.rhcloud.com//post/2 , onde sua completa confusão ficará clara.





orm