Melhor se aprofundar no JPA ou no Hibernate?

É melhor se focar na API? Ou em um provider so? Que no caso é o Hibernate visto que ele pode ser utilizado sem o JPA.
abs []'s

pq não os dois?

pq eu acho que a API deve ser seguida por todos… mas fiquei sabendo que o hibernate utiliza algumas coisas que nao estao na API.

Fiz a pergunta pq… ao menos no meu ver… e melhor seguir um padrao…
mas como nao tenho conhecimento de mercado, perguntei…

[quote=faeldix]pq eu acho que a API deve ser seguida por todos… mas fiquei sabendo que o hibernate utiliza algumas coisas que nao estao na API.

Fiz a pergunta pq… ao menos no meu ver… e melhor seguir um padrao…
mas como nao tenho conhecimento de mercado, perguntei…[/quote]

o mercado é dinâmico e o melhor a seguir, é saber os dois. Projetos mais antigos, vc vai encontrar hibernate puro, com hbm, outros ja usando annotations. E projetos mais recentes tendem a usar hibernate com JPA. Enfim, vai ter um pouco de tudo.

[quote=LPJava][quote=faeldix]pq eu acho que a API deve ser seguida por todos… mas fiquei sabendo que o hibernate utiliza algumas coisas que nao estao na API.

Fiz a pergunta pq… ao menos no meu ver… e melhor seguir um padrao…
mas como nao tenho conhecimento de mercado, perguntei…[/quote]

o mercado é dinâmico e o melhor a seguir, é saber os dois. Projetos mais antigos, vc vai encontrar hibernate puro, com hbm, outros ja usando annotations. E projetos mais recentes tendem a usar hibernate com JPA. Enfim, vai ter um pouco de tudo. [/quote]

De acordo.

Só para complementar o pessoal de cima…
Se tiver de escolher entre um ou outro, escolha JPA.

Motivo: JPA é uma especificação da Oracle, sendo assim é um padrão de persistência ao qual todas as empresas que quiserem criar suas implementações e serem aceitas pela oracle teram de seguir.

Como tudo em desenvolvimento, não existe uma regra, uma bala de prata; existem preferencias.
JPA é implementação de referencia, ou seja, não existe por si só. Ela precisa de um “provider”, seja ele o Hibernate ou o TopLink.
Acho que, independentemente de qual tecnologia vc vai usar, vc precisa construir uma estrutura que seja alterada sem muito trauma e ambas as tecnologias te dá este suporte, claro, se vc construir da maneira certa.
Recentemente aconteceu em um projeto que eu participei e foi comprovada quando a MundoJ fez um benchmark para saber a performance dos diversos mecanismos de persistencia.
Por curiosidade, o Toplink + MySQL + Windows demora 1min a mais fazendo a mesma query que o Hibernate + Postgres + linux.

Esses aspectos de arquitetura devem ser levados em consideração.

EU particularmente não gosto do JPA que eu vejo o pessoal implementando. EJBQL me dá calafrios e o sistema de Criterios dele ainda é bem recente, coisa que o Hibernate já está bem maduro.
Mas concordo quando se fala que usar uma estrutura padrão da Oracle é melhor.

Cara pra falar sério eu comecei meus estudos por Hibernate e depois pulei pra JPA hoje nos projetos da empresa trabalho com Hibernate JPA como provider e o resto com JPA, mas sofri bastante com JPA porque ele é mais fácil de iplementar e tal mas abstrai muita coisa, você no início fica sem saber de onde veio isso ou aquilo, tudo acontece muito magicamente e acho isso RUIM no início pois ficamos um pouco perdidos do que realmente está acontecendo por baixo dos panos… Por isso que dou muito valor pro cara que sabe os dois!

Mas essa dificuldade que vc teve não tem nada com o JPA, é bem provavel por algum mecanismo de injeção de dependencia… as coisas não “aparecem” do nada, elas estão configuradas para acontecerem exatamente dessa forma, via algum DI, seja Spring, CDI, Pico, etc

A priori, estude a sintaxe JPA do hibernate.
Acostume-se com os arquivos .cfg.xml e .hbm.xml, com annotations, com uma única bag em eager initialization.
Depois, estude a sintaxe pura do hibernate (e tudo o que disse acima). Então, migre para JPA puro, com EclipseLink.
Não é difícil, depois de acostumar-se, verá como é fácil.

[quote=InsaneChess]Só para complementar o pessoal de cima…
Se tiver de escolher entre um ou outro, escolha JPA.

Motivo: JPA é uma especificação da Oracle, sendo assim é um padrão de persistência ao qual todas as empresas que quiserem criar suas implementações e serem aceitas pela oracle teram de seguir.[/quote]

Não concordo com esta posição.
Vejamos, se eu me aprofundar em JSF 2, a especificação, estarei apto a trabalhar com rich, prime, ice, SpringWebFlow, imediatamente? Não.
A especificação é importante, mas a implementação é tão fundamental quanto.