quarta-feira, 20 de outubro de 2010

Exemplos de utilização do Criteria

public class ExemplosCriteria<T> {
 protected Class<T> persistentClass;
 protected Session session;

 public ExemplosCriteria(Session session, Class<T> persistentClass){
  this.session = session;
  this.persistentClass = persistentClass;
 }

 /** Retorna todos os registros da tabela com ordenação */
 @SuppressWarnings("unchecked")
 public List<T>findAll(String fieldOrder){
  Criteria c = this.session.createCriteria(persistentClass);
  c.addOrder(Order.asc(fieldOrder));
  return c.list();
 }

 /** Pesquisa de acordo com o campo e valor fornecido. retorna somente um objeto */
 @SuppressWarnings("unchecked")
 public T loadByField(String field, String value){
  Criteria c = this.session.createCriteria(persistentClass);
  c.add(Restrictions.eq(field, value));
  T t = (T) c.uniqueResult();
  return t;
 }

 /** Pesquisa de acordo com campo, valor (em qualquer posição do campo), ordena, e limita resultado */
 @SuppressWarnings("unchecked")
 public List<T> findByNameAnyWhere(String fieldName, String fieldValue,String fieldOrder, Integer maxResults){
   Criteria c = this.session.createCriteria(persistentClass);
   c.add(Restrictions.ilike(fieldName, fieldValue,MatchMode.ANYWHERE));
   c.addOrder(Order.asc(fieldOrder));
  
   if (maxResults != null) {  
    c.setMaxResults(maxResults);
   }
  
   return c.list();
 }

 /** Semelhante ao exemplo acima, porém, faz join em outras "tabelas/objetos" */
 @SuppressWarnings("unchecked")
 public List<T> findByNameAnyWhereJoin(String fieldName, String fieldValue,String fieldOrder, Integer maxResults){ 
   Criteria c = session.createCriteria(NotaFiscal.class, "nota");
   c.createAlias("nota.itens", "item",CriteriaSpecification.LEFT_JOIN);
   c.createAlias("item.usuario", "usuario",CriteriaSpecification.LEFT_JOIN);
   c.createAlias("usuario.unidadeOperacional", "unidade",CriteriaSpecification.LEFT_JOIN);
   c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
   c.addOrder(Order.asc(fieldOrder));
  
   Integer numero = Integer.parseInt(fieldValue);
   c.add(Restrictions.eq(fieldName, numero));
   return c.list();  
 }

 /** OR/AND no criteria */
 @SuppressWarnings("unchecked")
 public List<Usuario> getChamadosAbertosUsuario(Usuario usuario){  
     Criteria c = session.createCriteria(Usuario.class);
   
     Criterion c1 = Restrictions.eq("status", "A");
     Criterion c2 = Restrictions.eq("status", "C");
     c.add(Restrictions.or(c1, c2));
   
     c.add(Restrictions.eq("usuario", usuario));
     c.addOrder(Order.desc("id"));
   
     return c.list();
 }

 /** Criteria com cache de query ativado */
 @SuppressWarnings("unchecked")
 public List<View_Vencimentos> getVencimetosDoCliente(Integer matrizId){
  Criteria c = session.createCriteria(View_Vencimentos.class);
  c.add(Restrictions.eq("id_matriz", matrizId));
  c.addOrder(Order.asc("vencimento"));
 
  c.setCacheable(true);
  c.setCacheMode(CacheMode.NORMAL);
  return c.list();
 }

}

Nenhum comentário:

Postar um comentário