viernes, 19 de julio de 2013

DAO genérico para JPA (ORM)

Si usamos un ORM (Object-Relational Mapping) para la capa de persistencia en una base de datos relacional de nuestra aplicación ya sea Hibernate o JPA probablemente después de desarrollar unos cuantos servicios DAO nos daremos cuenta que tenemos unas cuantas operaciones básicas muy similares en todos.

Si queremos evitar tener duplicado ese código y ahorrarnos la codificación de esas operaciones básicas podemos desarrollar un DAO genérico que nos sirva para todas las entidades persistentes de nuestra aplicación usando los generics del lenguaje Java. Las operaciones candidatas a incluir en este DAO son: búsqueda por id, persistencia de un objeto, borrado, actualización, búsqueda paginada de todos los objetos y número de entidades persistidas de un tipo.

El código que podemos usar puede ser el siguiente:

Por supuesto, este DAO es muy simple pero podría ser ampliado para permitir hacer búsquedas además de sobre todos los elementos de una tabla y con paginación con unos determinados criterios de búsqueda que nos cubran las mayoría de los casos que necesitemos, es decir, podríamos implementar un método tal que le pasemos un objeto que se encargue construir lo que serían las cláusulas específicas de la consulta: findByCriteria(SimpleCriteriaBuilder criteria, Pagination pagination), findByNamedQuery(String namedQuery) o findByQuery(String query).

Referencia:
Código fuente completo del ejemplo
Persistencia con JPA y Apache Tapestry