| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 01:33:22
|
softwork
JavaBaby
![[Avatar]](/images/avatar/8e5e15c4e6d09c8333a17843461041a9.png)
Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline
|
Em nossos projetos utilizamos o Hibernate, pois até a data de inicio do desenvolvimento não existia o JPA.
Estou para iniciar um novo projeto, porém gostaria de algumas opiniões sobre o JPA comparado ao Hibernate, ou se deveria partir direto para JPA ?
Obrigado.
|
Dennys S. Sobrinho
Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174
Plante, cultive e colha a Paz. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 01:50:55
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
A diferenca entre JPA e Hibernate é a seguinte..
usando hibernate:
usando JPA:
o problema no JPA é que as vezes vc vai precisar de métodos específicos da implementacao... entao vc faz
A analogia nao ficou muito perfeita nao.. mas é por aí
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 02:06:53
|
Lucas Emanuel
GUJ Master
Membro desde: 09/08/2009 23:48:57
Mensagens: 1143
Localização: Heap
Offline
|
rogelgarcia wrote:A diferenca entre JPA e Hibernate é a seguinte..
usando hibernate:
usando JPA:
o problema no JPA é que as vezes vc vai precisar de métodos específicos da implementacao... entao vc faz
A analogia nao ficou muito perfeita nao.. mas é por aí
[OFF]
Rogel,
Sinceramente não entendi essa analogia
[/OFF]
Quanto a pergunta, respondo com outra: Por que não usar os dois?
This message was edited 1 time. Last update was at 16/07/2010 02:07:59
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 05:37:12
|
Fernando Generoso da Rosa
Virtual Machine Man
Membro desde: 14/01/2003 14:48:21
Mensagens: 555
Localização: Sombrio/SC
Offline
|
O que acontece é o seguinte...JPA e Hibernate são coisas diferentes.
JPA é uma especificação. Hibernate, uma implementação.
Se tu optar por utilizar a especificação JPA, tu vai ter que utilizar uma implementação...seja o Toplink, Hibernate, eclipseLink...
Fernando
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 08:37:53
|
fabiofalci
GUJ Master
![[Avatar]](/images/avatar/c359889a833e7612e0cff1dc69d272bc.png)
Membro desde: 11/04/2006 09:23:14
Mensagens: 1057
Localização: Porto Alegre - RS
Offline
|
Lucas Emanuel wrote:[OFF]
Rogel,
Sinceramente não entendi essa analogia
[/OFF]
A analogia do Rogel é que a interface (Collection) é a especificação (JPA) e a classe (ArrayList) é a implementação (Hibernate).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 10:11:08
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
O que acontece é o seguinte...JPA e Hibernate são coisas diferentes.
JPA é uma especificação. Hibernate, uma implementação.
Se tu optar por utilizar a especificação JPA, tu vai ter que utilizar uma implementação...seja o Toplink, Hibernate, eclipseLink...
tbm acho isso!
tem como usar uma Especificação sem implementação?? acho que não!
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 10:26:18
|
fabiofalci
GUJ Master
![[Avatar]](/images/avatar/c359889a833e7612e0cff1dc69d272bc.png)
Membro desde: 11/04/2006 09:23:14
Mensagens: 1057
Localização: Porto Alegre - RS
Offline
|
Vc precisa de uma implementação.
A implementação de referência do JPA 2 é o EclipseLink.
http://www.theserverside.com/news/thread.tss?thread_id=48757
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 11:42:42
|
softwork
JavaBaby
![[Avatar]](/images/avatar/8e5e15c4e6d09c8333a17843461041a9.png)
Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline
|
Pelo que eu havia lido a algum tempo atrás a própria especificação JPA foi feito com base no Hibernate, porém na minha "ignorância", imaginava que poderia utilizar diretamente o JPA como um framework ORM (integrado ao JRE/JDK) em contra partida ao Hibernate, Toplink, Eclipselink e talvez outros...
Sendo assim não vejo motivos para mudar do Hibernate para outro framework ORM.
Alguma outro opinião ?
Obrigado a todos.
This message was edited 1 time. Last update was at 16/07/2010 11:43:38
|
Dennys S. Sobrinho
Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174
Plante, cultive e colha a Paz. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 14:16:23
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
Vamos colocar ordem nas coisas.
JPA é apenas uma especificação, assim como o JDBC é apenas uma especificação. JPA por sí próprio não é nada, pois você precisa de uma implementação que é chamado de provider, que pode ser tanto o Hibernate, como o Eclipselink/Toplink, OpenJPA, etc; assim como pro JDBC você precisa de um driver do banco de dados.
Tanto o Hibernate como o Eclipselink podem ser usados separadamente em modo standalone como também podem funcionar como provider do JPA. A grande vantagem de usar qualquer um deles sobre o JPA é que se você quiser trocar de provider pode fazer sem alterar nada no seu código. Na verdade a única alteração é no persistence.xml alterar o nome do provider. Assim como no JDBC se você quiser trocar de banco de dados basta trocar o driver.
O JPA foi impulsionado pelo Emmanuel Bernard e pelo Gaving King, ambos do time do Hibernate e JBoss, porém a implementação de referência é o Eclipselink, que é do pessoal da Eclipse Fondation. Implementação de referencia significa apenas que o Eclipselink foi a cobaia da especificação, não que ele seja melhor nem mesmo que seja o padrão.
Quando o JEE6 foi lançando o Glassfish trouxe como provider padrão o Eclipselink como implementação padrão de JPA. Já o JBoss trouxe o Hibernate, e o roadmap do Geronimo pretende trazer o OpenJPA como padrão. Mas nada impede que a aplicação possa usar seu próprio provider, como é meu caso que normalmente uso Hibernate 3.5. como provider de JPA.
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 19:34:32
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
excelente explicacao garcia, melhor impossivel, parabens, enfim vc terá que sempre usar um provider com JPA, e normalmente usam o Hibernate. Agora usar JPA em um novo projeto é bem melhor evita varios problemas que o hibernate tem, e que nao sao poucos quando app vai pra producao. estou ate tratando sobre isso no meu blog www.camilolopes.com.br
enfim, novo projeto se puder ja der o start com JPA 2.0 e o provider a escolha.
flw!
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 23:09:20
|
softwork
JavaBaby
![[Avatar]](/images/avatar/8e5e15c4e6d09c8333a17843461041a9.png)
Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline
|
Obrigado pessoal.
Agradeço a todos que comentaram aqui sua experiências e opiniões, pois sei que elas são muito valiosas.
Eu de fato tenho alguns problemas com o Hibernate, mas para não ter causado algum desconforto aos fãs do Hibernate, preferi não mencioná-las e também por respeito ao prato que como a cada dia, ou seja, vivo do Hibernate.
Novamente muito obrigado.
|
Dennys S. Sobrinho
Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174
Plante, cultive e colha a Paz. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/07/2010 23:14:20
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
Isso é um fórum, e independente de paixões, é legal mencionar os problemas até mesmo para quem sabe reportar bugs para o developer team do Hibernate.
Quais os problemas vocês enfrentaram?
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2010 08:53:17
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
eh concordo com garcia, nada de paixao, eu nao mencionei os problemas para nao desfocar o topico, mas aqui alguns links, aonde abordo os possiveis problemas que temos com hibernate:
http://blog.camilolopes.com.br/open-session-view-%e2%80%93-hibernate-solucao/
usando JPA nao temos esse tipo de problema.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2010 18:36:08
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
LPJava, JPA tem sim o mesmo problema.
Esse assunto do lazy-initialization é bem controverso porque muita gente acha X, outros Y, e outros Z. Há inúmeras discuções por aí sobre isso.
Para fins de exemplo, imagine o cenário que você tem um servlet que chama ométodo findUser do EJB UserRemote. Esse UserRemote tem um EntityManager lá dentro. Quando você carrega o objeto do banco e há alguma propriedade lazy-loaded que ainda não foi carregada antes de sair do EJB terá o lazy-initialization-exception. Isso porque quando acabou a execução dentro do EJB todas as referencias são finalizadas, e o EntityManager é finalizado.
Quando você, dentro do JSP, tentar ler uma propridade terá o mesmo problema que no Hibernate puro.
Fazendo uma pequena busca na internet há uma série de discuções sobre isso: http://www.google.com.br/search?q=jpa+lazy+initialization+exception. Há aqui mesmo no GUJ uma série de discuções sobre o certo e errado dessa exception. Não vou entrar muito no mérito disso, já que o intuito é apenas exemplificar que o JPA também tem esse erro.
Diferentemente do Hibernate, no JPA o valor padrão do fetch é EAGER, então quando você tem algum one-to-* ou many-to-* o JPA faz load non-lazy. Talvez por isso vocês não tenham recebido esse erro.
Eu sou um grande fã do JPA porque ele finalmente coloca um padrão para as ferramentas ORM. Eu tenho um projeto de cobrança eletrônica que utilizada Hibernate. Havia um cliente que usava uma plataforma completa Oracle, então ele tinha vontade de usar o Toplink para ficar integrado ao OC4J. Fiz a alteração em poucos minutos e estava lá rodando em Toplink.
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/07/2010 19:18:09
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
garcia-jj wrote:LPJava, JPA tem sim o mesmo problema.
Esse assunto do lazy-initialization é bem controverso porque muita gente acha X, outros Y, e outros Z. Há inúmeras discuções por aí sobre isso.
Para fins de exemplo, imagine o cenário que você tem um servlet que chama ométodo findUser do EJB UserRemote. Esse UserRemote tem um EntityManager lá dentro. Quando você carrega o objeto do banco e há alguma propriedade lazy-loaded que ainda não foi carregada antes de sair do EJB terá o lazy-initialization-exception. Isso porque quando acabou a execução dentro do EJB todas as referencias são finalizadas, e o EntityManager é finalizado.
Quando você, dentro do JSP, tentar ler uma propridade terá o mesmo problema que no Hibernate puro.
Fazendo uma pequena busca na internet há uma série de discuções sobre isso: http://www.google.com.br/search?q=jpa+lazy+initialization+exception. Há aqui mesmo no GUJ uma série de discuções sobre o certo e errado dessa exception. Não vou entrar muito no mérito disso, já que o intuito é apenas exemplificar que o JPA também tem esse erro.
Diferentemente do Hibernate, no JPA o valor padrão do fetch é EAGER, então quando você tem algum one-to-* ou many-to-* o JPA faz load non-lazy. Talvez por isso vocês não tenham recebido esse erro.
Eu sou um grande fã do JPA porque ele finalmente coloca um padrão para as ferramentas ORM. Eu tenho um projeto de cobrança eletrônica que utilizada Hibernate. Havia um cliente que usava uma plataforma completa Oracle, então ele tinha vontade de usar o Toplink para ficar integrado ao OC4J. Fiz a alteração em poucos minutos e estava lá rodando em Toplink.
hmm, legal garcia, sua abordagem, eu de fato nao sabia do mesmo problema com JPA, ate pq nao passei pelo mesmo ainda. eh o velho ditado vivendo e aprendendo. mas, no hibernate se configurar para EAGER resolve o problema, mas nem sempre queremos EAGER .
Eu tb gosto da JPA, e o que vc citou como exemplo, eh show, salva o dia de qualquer desenvolvedor de software e ainda temos a satisfacao do cliente.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
|
|