| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/03/2010 09:45:13
|
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
|
Alguem sabe como fazer criteria no JPA2 igual existe o Example.create(target) do hibernate ?
|
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) 22/03/2010 11:28:12
|
Leozin
JWizard
![[Avatar]](/images/avatar/5dca4c6b9e244d24a30b4c45601d9720.png)
Membro desde: 18/06/2005 21:01:26
Mensagens: 2310
Localização: São Paulo/SP
Offline
|
Olá
Se você estiver usando o Hibernate como provider no seu JPA, é possível de fazer as queries for example
|
http://www.leozin.com.br/blog |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/03/2010 11:35:33
|
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
|
Leozin wrote:Olá
Se você estiver usando o Hibernate como provider no seu JPA, é possível de fazer as queries for example
isso eu sei....
a duvida é se a implementação de Criterias nova, que foi desenvolvida no JPA 2 (ou seja, criterias que valem tanto pro hiberante como o eclipselink) se existe algum equivalente ao Example.create(target) do hiberante...
todo o resto de criteira que precisei eu consegui fazer, falta só essa parte de example, que não sei se o JPA 2 implementou
|
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) 22/03/2010 11:45:12
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
Laviery, lí bem a spec do jpa2 e não tem nada sobre isso. O JEE6 tutorial é muito extenso, e não deu tempo de ler todo o tutorial + spec. Mas creio que não tenha find-by-example.
A API do JPA2 é muito complexa diante da criteria do Hibernate3. Como sempre quis usar JPA e não tinha criteria nele fiz uma API de criteria baseada nas classes do Hibernate para JPA. Na verdade tudo que eu fiz são um monte de classes de Criteria e Restrictions que no final o .toString dela gerava um HQL completo, assim bastava eu usar o createQuery do JPA normal.
Nessa implementação eu tinha feito um find-by-example que por baixo usava minha criteria, e ficou muito bom.
Tentei migrar isso para JPA2 mas não consegui ainda (por falta de tempo). Se você quiser posso te enviar esses códigos e você pode tentar algo. A idéia básica do meu find-by-example era navegar via Mirror (DSL de reflection usada no vraptor) para buscar as propriedades não nulas e fui criando os criterias baseados nisso. No final bastava mandar o JPA executar esse criteria.
Abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/03/2010 12:49:58
|
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
|
garcia-jj wrote:Laviery, lí bem a spec do jpa2 e não tem nada sobre isso. O JEE6 tutorial é muito extenso, e não deu tempo de ler todo o tutorial + spec. Mas creio que não tenha find-by-example.
A API do JPA2 é muito complexa diante da criteria do Hibernate3. Como sempre quis usar JPA e não tinha criteria nele fiz uma API de criteria baseada nas classes do Hibernate para JPA. Na verdade tudo que eu fiz são um monte de classes de Criteria e Restrictions que no final o .toString dela gerava um HQL completo, assim bastava eu usar o createQuery do JPA normal.
Nessa implementação eu tinha feito um find-by-example que por baixo usava minha criteria, e ficou muito bom.
Tentei migrar isso para JPA2 mas não consegui ainda (por falta de tempo). Se você quiser posso te enviar esses códigos e você pode tentar algo. A idéia básica do meu find-by-example era navegar via Mirror (DSL de reflection usada no vraptor) para buscar as propriedades não nulas e fui criando os criterias baseados nisso. No final bastava mandar o JPA executar esse criteria.
Abraços
tem que analizar bem.... o JPA 2 tem o meta modelo estatico que é muito interessante e eu estou gostando bastante... da pra fazer tipagem forte, o que é muito bom...
EU iniciei fazendo um pacote de criteria tb, mas deichei de lado, pq o do Hibernate é bem fácil de usar, e eu queria fazer com tipagem forte... agora com JPA2 e a geração de metamodelos staticos da pra conseguir fazer o criteira...
o ByExample é o mais complexo, vc tem q saber se as anotações estão nas propriedades ou nos campos, verificar sempre se o campo é ou não transient, fazer N checagens .... além de que transformar em HQL não acho muito legal.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/03/2010 13:36:25
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
Lavieri wrote:tem que analizar bem.... o JPA 2 tem o meta modelo estatico que é muito interessante e eu estou gostando bastante... da pra fazer tipagem forte, o que é muito bom...
Você pode fazer algo bem interessante usando o modelo estático. Você pode, por exemplo, via mirror fazer um describe no objeto e verificar as propriedades não nulas e a partir delas pegar o modelo estático e construir o criteria.
Lavieri wrote:EU iniciei fazendo um pacote de criteria tb, mas deichei de lado, pq o do Hibernate é bem fácil de usar, e eu queria fazer com tipagem forte... agora com JPA2 e a geração de metamodelos staticos da pra conseguir fazer o criteira...
Essa minha idéia de fazer meu próprio criteria era nos tempo do JPA1. Embora a criteria do JPA2 seja bem complexa não vejo porque não usar o padrão, né? Então para os projetos que posso usar JPA2 estou já usando o modelo novo. Para os que não posso usar JPA2 seguem com minha criteria.
Lavieri wrote:o ByExample é o mais complexo, vc tem q saber se as anotações estão nas propriedades ou nos campos, verificar sempre se o campo é ou não transient, fazer N checagens .... além de que transformar em HQL não acho muito legal.
O que eu fiz na minha foi varrer o objeto e verificar as propriedades. Se continer @Transient ou modificadores static ou transient a propriedade é ignorada. Caso for um @Entity ou @Embeded ele navega dentro do objeto.
Transformar em JPQL é um nojo mesmo, mas era a única coisa que eu poderia fazer no JPA1. Esse foi o preço que eu paguei por querer usar JPA e não Hibernate. Além do mais como o projeto é EJB seria um saco ficar fazendo manual entityManager.getDelegate.
Abraços
|
|
|
 |
|
|