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”.
[/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.
[/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? [=
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]É 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]
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:
Condições where no join. Hoje é possível fazer join, mas sem especificar um where. e: easyCriteria.join(“dogs”).whereEquals(“name”, “floquinho”, dogs);
Paginação
Canonical
É algo que eu estou pensando em fazer. Lógico que pode mudar a ordem. [=
[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:
Condições where no join. Hoje é possível fazer join, mas sem especificar um where. e: easyCriteria.join(“dogs”).whereEquals(“name”, “floquinho”, dogs);
Paginação
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: