EasyCriteira - Facilitando o uso de criteria do JPA

Pessoal, boa tarde.

Venho falar de uma nova ferramenta open source para facilitar o uso de Criteria, se chama EasyCriteria.

Veja só como essa ferramenta facilita. Abaixo como um select ALL utilizando criteria nativo do JPA seria:CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class); Root<Person> root = criteriaQuery.from(Person.class); criteriaQuery.select(root); TypedQuery<Person> query = entityManager.createQuery(criteriaQuery); query.getResultList();Agora, veja como ficaria uma Criteria utilizando o EasyCriteria:EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQuery(entityManager, Person.class); easyCriteria.getResultList();Essa solução é para ajudar quem trabalha com EntityManager nativo e não deseja deixar o código acoplado ao hibernate que tem uma ótima critéria. Com isso seu código ficará desacoplado do Hibernate e ainda assim você poderá ter um fácil acesso ao Criteria. [=

Atualmente se encontra na versão beta, temos 100% de cobertura no código que é testado com Hibernate, EclipseLink e OpenJPA.

É possível também fazer um link dos comandos conforme abaixo:easyCriteria.whereEquals("houseNumber", 150L).orderByAsc("age"); easyCriteria.whereIsNull("birthDay").leftJoinFetch("dogs");Lógico que já existe diversas coisas que podem e serão melhoradas. A primeira versão está sendo lançada para já se ter um idéia de como será a aceitação pelos usuários, possíveis bugs e melhorias.
Na versão 1.0 já é possível realizar o Join com parâmetros na Criteria:easyCriteria.innerJoin("dogs", Dog.class); easyCriteria.whereJoinEquals("dogs", "name", "Dark"); easyCriteria.whereJoinStringNotIn("dogs", "name", names); // names is a List<String> easyCriteria.whereJoinStringLike("dogs", "name", "M%"); easyCriteria.whereJoinListIsEmpty("dogs", "cars"); easyCriteria.whereJoinAttributeIsNull("dogs", "nickName"); easyCriteria.whereJoinStringBetween("dogs", "name", "A", "L");O jar dessa biblioteca é enorme, 10kb. O.o Sim, a biblioteca não precisa de levar nenhuma dependência uma vez que para ser utilizada o desenvolvedor já deve ter o JPA “up and running”.

O site oficial é http://easycriteria.uaihebert.com

Lá tem um guide com todos os métodos, o jar para download e mais. [=

Espero que vocês gostem e possam compartilhar! =D

Interessante. Mas o link não ta abrindo.

Show de bola jakefrog ,

so não gostei muito da assinatura dos metodos

whereEquals
whereIsNull

achei o where nos metodos de restrição repetitivos.

é possivel fazer isso

easyCriteria.whereEquals("houseNumber", 150L).whereIsNull("birthDay")

?

[quote=DaniloAndrade]…
so não gostei muito da assinatura dos metodos

whereEquals
whereIsNull

achei o where nos metodos de restrição repetitivos.
[/quote]

Eu achei bacana, ainda mais se usa um recurso de autocompletar da IDE. fica bem intuitivo.

Como você faria?

[quote=DaniloAndrade]é possivel fazer isso

easyCriteria.whereEquals("houseNumber", 150L).whereIsNull("birthDay")  

Pelo que eu testei é sim, você pode ir adicionando suas clausulas como quiser.

[quote=avsouza]Interessante. Mas o link não ta abrindo.[/quote]Deu algum problema com DNS. =/
Por aqui é possível acessar: http://easycritera.uaihebert.com/?page_id=84

[quote=DaniloAndrade]Show de bola jakefrog ,

so não gostei muito da assinatura dos metodos

whereEquals
whereIsNull

achei o where nos metodos de restrição repetitivos.

é possivel fazer isso

easyCriteria.whereEquals("houseNumber", 150L).whereIsNull("birthDay")

?

[/quote]É possível fazer link dos comandos sim. [=
Quanto ao where foi a melhor forma que eu encontrei até o momento, uma vez que esse comando identifica alguma condição a ser adicionada. Qualquer idéia é bem vinda! =D

[quote=jakefrog][quote=avsouza]Interessante. Mas o link não ta abrindo.[/quote]Deu algum problema com DNS. =/
Por aqui é possível acessar: http://easycritera.uaihebert.com/?page_id=84[/quote]
Aqui acessou tranquilamente.

sei la,

acho que sem o where ficaria mais fluente

ai por exemplo o codigo ficaria assim:

easyCriteria.equals("houseNumber", 150L).isNull("birthDay") ;

[quote=DaniloAndrade]sei la,

acho que sem o where ficaria mais fluente

ai por exemplo o codigo ficaria assim:

easyCriteria.equals("houseNumber", 150L).isNull("birthDay") ;

[/quote]Eu tinha pensado nessa possibilidade também, acontece que colocando o where* dá para agrupar os comandos. todos os where* estão “agrupados”, e nisso é possível separar os join, orderby e assim vai. meu modo de ver, se mais gente opinar isso, por que não mudar? [=

Eita, só agora que eu vi que criei com o dominio errado. :blush:

Pedi alteração já! desculpe! :oops: :oops:

Pessoal, site está com domínio correto agora, up and running! \o/

http://easycriteria.uaihebert.com/

Criei um post para ajudar a entender melhor por que essa ferramenta foi criada e como utilizá-la! =D

Tem o código fonte para download: http://uaihebert.com/?p=1555

Substitui uns JPQLs aqui e tudo funcionou certinho :slight_smile:

tirando que é mais fácil escrever, né, pois falta de atenção em um JPQL é desastroso.

Com o EasyCriteria aí fica mais fácil :slight_smile:

like!

A Criteria Query API é uma das coisas mais pé no saco do JPA2, muito verbosa/trabalhosa/chata/*, acho que só vai chegar perto do que é o LINQ to Entities quando tivermos lambda expressions no Java.

Olhando rápido o projeto, tenho duas sugestões:

  • Pelo que eu vi o projeto vai ser código aberto, porque não colocar no github?
  • A API não suporta Canonical Metamodels? Acho que isso é um “must have” da sua API, criteria perde muito sem isso, na minha opinião.

Parabéns pela iniciativa, nem sei se já existe algo parecido por aí.

Grande Hebert, sempre colaborando com nós mortais programadores JAVA. Valeu cabra!

[quote=jakefrog][quote=DaniloAndrade]Show de bola jakefrog ,

so não gostei muito da assinatura dos metodos

whereEquals
whereIsNull

achei o where nos metodos de restrição repetitivos.

é possivel fazer isso

easyCriteria.whereEquals("houseNumber", 150L).whereIsNull("birthDay")

?

[/quote]É possível fazer link dos comandos sim. [=
Quanto ao where foi a melhor forma que eu encontrei até o momento, uma vez que esse comando identifica alguma condição a ser adicionada. Qualquer idéia é bem vinda! =D[/quote]

Talvez algo do tipo:

easyCriteria.where(equals("houseNumber", 150L), isNull("birthDay"));

Mas aí oq seria o easyCriteria.where(equals(“houseNumber”, 150L), isNull(“birthDay”));? Objetos? Aí eu teria que obrigar o usuário a saber da API interna. Não queria isso. =/

Mas para isso eu já estou tendo mais idéias. obrigado pela força.

[quote=Jairo Junior]A Criteria Query API é uma das coisas mais pé no saco do JPA2, muito verbosa/trabalhosa/chata/*, acho que só vai chegar perto do que é o LINQ to Entities quando tivermos lambda expressions no Java.

Olhando rápido o projeto, tenho duas sugestões:

  • Pelo que eu vi o projeto vai ser código aberto, porque não colocar no github?
  • A API não suporta Canonical Metamodels? Acho que isso é um “must have” da sua API, criteria perde muito sem isso, na minha opinião.

Parabéns pela iniciativa, nem sei se já existe algo parecido por aí.[/quote]E aí Jairo, beleza?
Eu pensei em colocar no github mas eu teria que estudar seu versionamento. =/
Eu sei que é bom e prático mas no momento ñ estou com tempo hábil para entender melhor a ferramenta. =/
Aí eu escolhi o google codes. Pra falar a verdade o código já está lá abertão! =D

Quanto ao Canonical realmente é algo a ser implementado também, só que não por agora. O Canonical é para usuário mais avançados e de primeira instância eu penso em atrair aqueles que tentaram utilizar e não conseguiram, ou até mesmo que estão utilizaram mas ficou verboso. Para o Canonical será necessário uma API mais complexa e por enquanto estou a evitar isso. =D

Como futuras releases eu coloquei na seguinte sequência de prioridade:

  1. Condições where no join. Hoje é possível fazer join, mas sem especificar um where. e: easyCriteria.join(“dogs”).whereEquals(“name”, “floquinho”, dogs);
  2. Paginação
  3. Canonical

É algo que eu estou pensando em fazer. Lógico que pode mudar a ordem. [=

Valeu pela força.

[quote=jakefrog][quote=Jairo Junior]A Criteria Query API é uma das coisas mais pé no saco do JPA2, muito verbosa/trabalhosa/chata/*, acho que só vai chegar perto do que é o LINQ to Entities quando tivermos lambda expressions no Java.

Olhando rápido o projeto, tenho duas sugestões:

  • Pelo que eu vi o projeto vai ser código aberto, porque não colocar no github?
  • A API não suporta Canonical Metamodels? Acho que isso é um “must have” da sua API, criteria perde muito sem isso, na minha opinião.

Parabéns pela iniciativa, nem sei se já existe algo parecido por aí.[/quote]E aí Jairo, beleza?
Eu pensei em colocar no github mas eu teria que estudar seu versionamento. =/
Eu sei que é bom e prático mas no momento ñ estou com tempo hábil para entender melhor a ferramenta. =/
Aí eu escolhi o google codes. Pra falar a verdade o código já está lá abertão! =D

Quanto ao Canonical realmente é algo a ser implementado também, só que não por agora. O Canonical é para usuário mais avançados e de primeira instância eu penso em atrair aqueles que tentaram utilizar e não conseguiram, ou até mesmo que estão utilizaram mas ficou verboso. Para o Canonical será necessário uma API mais complexa e por enquanto estou a evitar isso. =D

Como futuras releases eu coloquei na seguinte sequência de prioridade:

  1. Condições where no join. Hoje é possível fazer join, mas sem especificar um where. e: easyCriteria.join(“dogs”).whereEquals(“name”, “floquinho”, dogs);
  2. Paginação
  3. Canonical

É algo que eu estou pensando em fazer. Lógico que pode mudar a ordem. [=

Valeu pela força.[/quote]

Não tinha achado nenhum link pro google code lá no seu site, pra quem como eu também não achou, segue o link:

http://code.google.com/p/easy-criteria/