Alguem sabe como fazer criteria no JPA2 igual existe o Example.create(target) do hibernate ?
Olá
Se você estiver usando o Hibernate como provider no seu JPA, é possível de fazer as queries for example
[quote=Leozin]Olá
Se você estiver usando o Hibernate como provider no seu JPA, é possível de fazer as queries for example[/quote]
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
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
[quote=garcia-jj]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[/quote]
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.
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.
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.
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