Nesta nova versão, o projeto vem com novas funcionalidades para de deixar o código mais simples, mas também possui vários recursos para facilitar as consultas das entidades do Hiberbate ou JPA.
O projeto sofreu uma grande refatoração e por isto não mantem compatibilidade com a versão anterior. Porem, nesta nova versão existe a integração com o JPA2.
Segue, em ordem, as informações de como utilizar o projeto:
net.priuli.filter.Filter
Esta classe armazena os parâmetros que deverão ser usado como condições na sua consulta do JPA2 ou do Hibernate. Esta classe é um Map<String,Object> e a partir dela que as consultas são construídas.
net.priuli.filter.hibernate.CriteriaSelectBuilder
A classe acima transforma um ‘Filter’ em um objeto Criteria do Hibernate.
net.priuli.filter.jpa.QuerySelectBuilder
A classe acima transforma um ‘Filter’ em um objeto Query do JPA2.
Classes do pacote net.priuli.filter.criterion
São classes utilizadas para criar as condições e restrições da consulta, ou seja são os parâmetros que são adicionadas no objeto Filter.
Abaixo estão as classes do pacote ‘net.priuli.filter.criterion’:
- Between.java – Adiciona uma condição Between no Filter
- Fetch.java – Ativa o Hibernate/JPA Fetch
- Ignore.java – Ignora uma condição dentro do Filter
- JoinMode.java – Permite usar uma união (join) na query
- Like.java – Adiciona uma condição like no Filter
- LikeMode.java – Tipos do Like
- Limiter.java – Permite limitar valores (maior,menor,igual)
- LimiterMode.java – tipos do limite
- NotEqual.java – Adiciona uma condição != no Filter
- Order.java – Permite ordenar o resultado
- OrderMode.java – Tipos de ordenação
- Range.java – Permite paginar os resultados.
- RangeLimitImpl.java – Tipo de paginação via limite
- RangeSimpleImpl.java – Tipo de paginação normal
As classes abaixo são opcionais mas permitem construir uma classe Filter a partir de uma entidade, ou seja as classes abaixo copiam os valores não-nulos de uma entidade e criam um Filter com estes valores.
net.priuli.filter.hibernate.HibernateFilterBuilder
Constrói um Filter a partir de uma entidade do hibernate. Todas as informações não nulas da entidade serão convertidas em condições e carregadas no Filter, inclusive os relacionamentos (join).
net.priuli.filter.jpa.JPAFilterBuider
Constrói um Filter a partir de uma entidade do JPA2. Todas as informações não nulas da entidade serão convertidas em condições e carregadas no Filter, inclusive os relacionamentos (join).
Códigos
Criando consultas Hibernate
Exemplo hibernate
Filter filter = FactoryFilter.createFilter("phones.number", new Between<Long>(5683543L, 89548345L));</p>
filter.add(new Order("phones.number",OrderMode.ASC));
filter.add(new Order("name",OrderMode.ASC));
Criteria criteria = new CriteriaSelectBuilder<Person>(session,Person.class).build(filter);
List<Person> person = criteria.list();
O código acima ira gerar um Hql similar:
select p from Person p inner join Phone ph on ph.person = p.id where p.number between 5683543 and 89548345 order by p.name asc, ph.number asc
Exemplo JPA2
Filter filter = FactoryFilter.createFilter();
filter.add("name", new Like("JOHN",LikeMode.START));
Query query = new QuerySelectBuilder<Person>(entityManager, Person.class).build(filter);
List<Person> people = query.getResultList();
O código acima ira gerar um hql similar:
select p from Person p where p.name like 'JOHN%'
Links:
Código de exemplos: Exemplos
Projeto(SVN,CODE,DOWNLOAD): JPriuliFilter Download
Agradecimentos: Flavio Henrique Faria (Tester)
Felipe, há algum detalhe quanto a utilizar o filtro do hibernate que o vraptor tem? Pois adicionei o seu projeto no meu ClassPath e quando subo o servidor o vraptor lança a seguinte exceção:
Caused by: java.lang.ClassNotFoundException: net.priuli.filter.criterion.Criterion
Não, é bem simples mesmo.
A instalação é simples, basta baixar o jpriuli-filter2.0RC.jar e jogar no classpath da aplicação.
Pelo erro o programa não encontrou as classes do arquivo.
Verifica se o arquivo baixado esta indo dentro do arquivo war(web-inf\lib) caso esteja gerando o arquivo manualmente. (baixar a versão 2.0RC)
Se tiver mais informações no erro posta ai!!
Pode mandar duvidas tb pelo guj, caso vc utilize! ( http://www.guj.com.br/java/282728-jpriulifilter-20 )
Flw
Felipe, no seu framework há a opção de operações com o “ou” , ou algo parecido com o Disjunction do hibernate?
A condição OR foi adicionada na versão 2.1