Hibernate. Buscar texto utilizando criteria con case-insensitive y accent-insensitive

En Hibernate tenemos la opción de utilizar Criteria o HQL (en breve voy a realizar un comparativo).
En algún momento necesitaremos realizar búsquedas de campos de textos que ignoren acentos y mayúsculas.

En pocas líneas, podemos hacerlo en esta función genérica:


public List<T> getAll(String field,String value,Class<T> c) {

String parameter = Normalizer.normalize(value, Normalizer.Form.NFKD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

//---

Criteria criteria = session().createCriteria(c);  //Obtener la session de Hibernate antes

List<T> results = new ArrayList<T>();

criteria.add(Restrictions.eq(field, parameter).ignoreCase());

results = (List<T>) criteria.list();

return results;

}

Vamos a comentarla:

La función Normalize nos eliminará los tildes. En esta entrada se explica mejor

En esta línea criteria.add(Restrictions.eq(field, parameter).ignoreCase());  tenemos la orden de ignorar las mayúsculas o minúsculas.

Todo armado con Criteria.

Simple pero útil código.

Anuncios