| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/03/2010 23:32:39
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Com a nova (nem tão nova assim) onda de se utilizar JPA ao invés de Hibernate, surgem as questões...
Quase todo mundo que hoje utiliza JPA, tem como implementação o Hibernate que já utilizavam anteriormente..
O JPA introduziu novas interfaces e classes além do que já tinhamos que saber com o Hibernate. Mas o JPA não é uma especificação completa porque ainda é necessário em alguns momentos utilizar coisas especificas do Hibernate.
O JPA acabou introduzindo uma nova camada de persistencia e nós sabemos que camadas em cima de camadas trazem problemas.
Se a implementação de JPA que todo mundo utiliza é o Hibernate, qual é a utilidade de se ter JPA?
This message was edited 1 time. Last update was at 16/03/2010 23:45:37
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/03/2010 23:48:20
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
Seguinte....
Hiberante padrão não implementa JPA
vc pode usar ele direto, mas não vai conseguir usar tudo que o JPA oferece
o JPA oferece menos coisa que o Hibernate.... mais oferece algumas coisas de forma diferente do hiberante com interface mais faceis...
o hiberante pra atender ao JPA criou um adaptador, o pactoe EntityManager, que implementa o JPA ou seja, ele nada mais faz que delegar pra interface do JPA os comandos corretos em uma Session....
Se vc usa Hiberante não pode usar @EntityListeners() por exemplo, para callbacks, vai ter que usar intereptors do hibernate....
Se vc usar JPA Puro, não vai ter várias coisas que só tem no Hiberante....
............
Solução ? cria o JPA usando o Hiberante.... passa a poder usar tudo do HIBERNATE e tudo do JPA.... cria os entitymanager normalmente.... e pra pegar a session basta fazer
Session session = (Session)EntityManger.getDelegate();
A vantagem é que vc consegue usar os 2....
...........
E fora isso quase todo mundo cria uma camada do seu projeto (ou com DAO, que eu desaprovo, ou com Repository, que é o que uso) ....
No caso seu projeto conversa como Repository ou DAO que é um adpatador para o JPA (ou diretamenteo hibernate) que é um adaptador para a Session (no caso de usar jpa) ....
Assim seu projeto passa a depender de uma estrutura propria, o Repository ou o DAO .... e se omundo cair, explodir, houver uma guerra, e vc resolver mudar no proximo projeto a implementação de persistencia, vai continuar utiliando sua estrutura de DAO ou Repository, e assim sua Lógica, fica protegida dessa sua escolha de persistencia
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/03/2010 23:54:36
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Entendi..
Mas o que eu questiono é o seguinte.. se na verdade você mesmo usando JPA, vai estar utilizando é o Hibernate...
Pra que JPA?? Porque nao usar o Hibernate direto como sempre foi feito?
Que vantagem tem no JPA??
(Entende o que eu quero dizer?)
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:00:53
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
rogelgarcia wrote:Entendi..
Mas o que eu questiono é o seguinte.. se na verdade você mesmo usando JPA, vai estar utilizando é o Hibernate...
Pra que JPA?? Porque nao usar o Hibernate direto como sempre foi feito?
Que vantagem tem no JPA??
(Entende o que eu quero dizer?)
não é exatamente igual.... JPA é uma interface... é uma especificação, ele não é uma implementação, ele vem pra dizer....
quer criar um pacote de persistence ? use a interface JPA, usando esssa interface vc poderá ser escolhido por quem utiliza JPA
..............
Hiberante é uma implementação real, e nã nasceu pra implementar o JPA, por isso ele tem suas proprias interfaces, e tem mais recurso que a implementação do JPA poderia pedir....
Para solucionar o Hierante criou um Adaptador.... que simplismente atende a tudo do JPA, a 100% da especificação JPA, e continua funcionando como antes, com a espcificiação do Hiberante.....
Usar hiberante sozinho, não vai ter as funcionalidades do JPA....
.................
por exemplo
por exemplo, se vc criar uma SessionFactory, e tentar persistir uma Entidade, ela não vai chamar o Auditor, e assim setar a data correta de criação.
Porem criando uma EntityManagerFactory, ele vai fucionar, mesmo que a implementação seja o Hiberante....
a maioria das anotações são do JPA e não do Hiberante, e anotação é melhor q xml, mais um motivo pra pelomenos instnaciar pelo JPA
This message was edited 4 times. Last update was at 17/03/2010 00:03:28
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:07:06
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Sim.. eu sei que JPA é só uma especificação e Hibernate é uma implementação... isso é claro pra mim..
A minha questão é.. pra que JPA? Qual a vantagem eu tenho em relação a usar só o hibernate?
-----
Sobre a questão do Listener, isso é só uma forma diferente de fazer a mesma coisa que é possível fazer com hibernate..
E o hibernate tem o hibernate annotations... então trabalhar com annotations no hibernate nao é problema.. mesmo sem usar JPA
------
O que eu quero dizer é.. o Hibernate atende, inclusive melhor que se usar só a interface JPA.. entao pra que eu vou querer JPA?
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:09:26
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
O que eu to querendo chamar a atençao.. é que parece invenção de moda.. entende?
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:10:31
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
rogelgarcia wrote:Sim.. eu sei que JPA é só uma especificação e Hibernate é uma implementação... isso é claro pra mim..
A minha questão é.. pra que JPA? Qual a vantagem eu tenho em relação a usar só o hibernate?
-----
Sobre a questão do Listener, isso é só uma forma diferente de fazer a mesma coisa que é possível fazer com hibernate..
E o hibernate tem o hibernate annotations... então trabalhar com annotations no hibernate nao é problema.. mesmo sem usar JPA
------
O que eu quero dizer é.. o Hibernate atende, inclusive melhor que se usar só a interface JPA.. entao pra que eu vou querer JPA?
A pergunta na verdade é ao contrario ...
Pra que se amarrar única e exclusivamente ao Hiberante ? se eu consigo mapear todas as minhas entidades com JPA ? e assim posso usar outra Unidade de persistencia como Link por exemplo, no caso de um dia precisar ?
vc não conhece o amanha, e em java uma das boas praticas dizem.... não programe para implementação, programe para a interface... e é isso que é programar para o JPA
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:16:36
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
por exemplo vc já deve ter cançado de ver isso escrito por ai
e vc já se perguntou ? pq não fazer
já que uma arraylist é mais poderosa que apenas a interface ? afinal a arraylista tem implementações, e pode ter propriedades únicas....
o problema de fazer isso é que vc amarra a droga da ArrayList, e existem outros tipos de lista por ai!
e se vc fizer um método
vai acabar se ferrando, pq por exemplo, a lista do Hiberante é uma PersistenceBag, e não uma ArrayList, e não vai conseguir usar....
subindo o nivel, para a interface mais abrangende, vc abre o leque de opções.....
tem um nivel de acoplamento muito mais baixo.... pois aceita muito mais gente
e digo mais! se dentro dessa lógica, vc tiver apenas um FOR, mesmo que em seu projeto vc saiba que só tem list, vc deve escrever Collection<?> e não List<?>
por isso
This message was edited 1 time. Last update was at 17/03/2010 00:16:51
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:22:32
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Lavieri wrote:
Pra que se amarrar única e exclusivamente ao Hiberante ? se eu consigo mapear todas as minhas entidades com JPA ? e assim posso usar outra Unidade de persistencia como Link por exemplo, no caso de um dia precisar ?
vc não conhece o amanha, e em java uma das boas praticas dizem.... não programe para implementação, programe para a interface... e é isso que é programar para o JPA
Acho que é muito improvavel alguém trocar de implementacao de JPA, isso é trocar seis por meia dúzia...
E aposto o que for.... que nessa troca vão haver bugs... pois não teria vantagem trocar de implementacao a nao ser pra usar as coisas especificas...
Pelo que eu já vi na minha vida isso nao funciona... é bonito na teoria mas na pratica é diferente...
E pra voce chegar a trocar isso o sistema tem que ser tão antigo... e vai ter tantas coisas novas.. e incompatíveis com o que já foi feito...
Valeria a questão das várias implementações de JPA... se a especificação fosse boa..
JPA na verdade foi criado baseando-se no hibernate... Fizeram ao contrário da sua lógica.. primeiro fizeram a implementacao.. depois a interface.. ou seja.. a interface ficou atrelada a implementacao do mesmo jeito...
Mas valeu seus comentários... vamos ver como esse negócio de JPA caminha...
Na minha humilde opinião.. só tá servindo pra complicar
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:23:57
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
O exemplo da lista eu considero mais pertinente que o JPA.. pois a interface é bem definida.. e tem várias implementacoes.. uma para cada situacao...
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:30:17
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Acho que o povo gasta fosfato demais pensando coisas cabulosas.. em vez de pensar no simples..
quer ver um exemplo
A anotação @ManyToOne.. já é fetch EAGER por default...
se vc quiser LAZY tem que colocar em todas as annotacoes...
olha que saco.. ao invés de vc configurar isso uma vez só na sua aplicacao...
Ao invés de o povo preocupar com coisa útil.. fica viajando.. em super arquiteturas....
Por isso os Rails tao aí dominando tudo.. é facil e tem um jeito de fazer e bem feito..
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:32:16
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
nop, JPA foi criada para o Link, que era da oracle, e foi passada a eclipse fundation, e a implementação do JPA2 que tem muita base no hiberante, principalmente em criteria...
O reuso não é exatamente do seu projeto, vc não vai pegar seu projeto, e apagar o Hiberante e enfiar um TopLink um EclipseLink ou coisas do tipo....
Mas vc pode se ver na situação de pegar um projeto usando EclipseLink, e simplismente não conhecer nada de JPA e nada de EclipseLink, e acabar não conseguindo reutilizar nada que ja usou na vida, apesar de ter anos de experiencia com ORM não vai conseguir se dar bem nesse novo projeto...
o que vc reusa são os componentes, por exemplo.... eu tenho várias entidadees, que dou CTRL+C e CTRL+V em novos projetos.... e não tenho que alterar 1 virgula....
se pegar um projeto diferente do meu mundo, pelomenos eu escrevi elas para algo de aceitação geral...
...........
por exemplo,
se vc escrever
session.save(entity); .... só vai reusuar em ambiente com hibernate
se usar entityManger.persist(entity); .... já vai poder reusuar em qualquer ambiente com JPA, e isso inclui o proprio hiberante
se usar repository.add(entity) .... vai poder escrever seu repositorio, e poder reusar a lógica criada em qualquer lugar
e se seu novo projeto não for com hiberante, vc precisará reescreverapenas o repositorio, mas nunca reescrever todo chamada a um .persist, ou .save
..........
e não to falando isso pq é bonito, ou é lindo na teoria, isso é pratica, e enclusive se chama boas praticas ^^
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:35:57
|
marciorodr0
Thread.start()
![[Avatar]](/images/avatar/9bdd43757138e5ea2ece8bf9115a2ab4.jpg)
Membro desde: 04/08/2008 12:55:16
Mensagens: 49
Localização: Carapicuíba SP
Offline
|
Tópico legal...
A Sun sempre faz isso... pega as boas idéias do mercado e documenta... específica, padroniza, acho muito legal isso...
Ao meu ver a única vantagem mesmo de utilizar em uma implementação JTA, apenas o que está especificado pela Sun, é a possibilidade de troca da implementação...
Mas, convenhamos, ninguém faz isso, como já foi dito anteriormente...
abss
This message was edited 1 time. Last update was at 17/03/2010 00:37:41
|
Sun Certified Programmer for the Java 2 Plataform, Standard Edition 5.0 - PASS 97%
Sun Certified Web Component Developer for the Java 2 Plataform, Enterprise Edition 5.0 - PASS 100%
Sun Certified Business Component Developer for the Java Platform, Enterprise Edition 5.0 - PASS 98% |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:38:49
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Entendi... a proposta... é um ambito maaaiorrr do que eu estava pensando...
Pro projeto que eu faço aqui .. nao tem validade mesmo nao...
Tem caso eu for passar esse projeto pra alguém.. ele vai estar mais padronizado...
(eu to ligado nas boas praticas... eu concordo também.. mas o que fico indignado é que ao invés de resolver o problema mesmo.. o povo fica querendo crescer e crescer e inventando coisas.. se o que já existe nem tá tao bom assim...
já fuçei muito o código do hibernate... que tragédia... de boas práticas aquilo passou longe.. hahhah)
Eu uso o hibernate.. mas acho ele muito limitado.. mas num tem outro né?!
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/03/2010 00:44:15
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
rogelgarcia wrote:Entendi... a proposta... é um ambito maaaiorrr do que eu estava pensando...
Pro projeto que eu faço aqui .. nao tem validade mesmo nao...
Tem caso eu for passar esse projeto pra alguém.. ele vai estar mais padronizado...
(eu to ligado nas boas praticas... eu concordo também.. mas o que fico indignado é que ao invés de resolver o problema mesmo.. o povo fica querendo crescer e crescer e inventando coisas.. se o que já existe nem tá tao bom assim...
já fuçei muito o código do hibernate... que tragédia... de boas práticas aquilo passou longe.. hahhah)
Eu uso o hibernate.. mas acho ele muito limitado.. mas num tem outro né?!
esse é o fato... tem outro sim... e épra isso que o JPA esta ai... pra ter muitooosssss outros....
antes só existia as coleções do Java Collections Framework.... hoje quase todo mundo usa as do google pq são melhores (sem falar que a um tempinho atras tinhas ainda as da apache).... imagina se vc programasse pra implmentação ? apenas por saber que... implentação X é a melhor ?
..........
Exite TopLink, EclipseLink, que seriam como versão 1 e 2, de uma mesma base.... existem mais, acredito, mas pelomenos tem essas
o EclipseLInk vem como padrão no Eclipse, e tem muita gente que usa... claro que nem se compara a quantidade que usa hiberante....
pensar só no seu projeto, vc não vai longe.... com certeza um dia, vc vai mudar de projeto, e abranger a quantidade de código que vc possa reusar é bom, na hora de mudar de abordagem
This message was edited 1 time. Last update was at 17/03/2010 00:46:10
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
|
|