Buenas prácticas en la construcción de la capa de persistencia con JPA

LIBP-0048 (Libro de pautas)

Se deben tener en cuenta las siguientes indicaciones al construir una capa de persistencia mediante JPA

Pautas

TítuloCarácter
Modelo de grano finoObligatoria
Clases Entity serializablesObligatoria
Constructor por defectoObligatoria
Acceso mediante camposRecomendada
Caché de segundo nivelObligatoria
Modo de cargaRecomendada
Clase con claves primariasObligatoria

Modelo de grano fino

Usar el modelo de grano fino y las posibilidades de vinculación en JPA

Se debe utilizar el modelo de grano fino y las posibilidades de vinculación que ofrece JPA para designar objetos persistentes que no tienen la necesidad de ser una entidad por sí mismas. 

Clases Entity serializables

Implementar Serializable en las clases Entity

La especificación JPA dice que debe hacerse pero algunos proveedores de JPA no lo hacen. Hibernate como proveedor de JPA no lo hace, lo que puede provocar que aparezcan errores dentro del código que lancen la excepción ClassCastException si Serializable no ha sido implementado.

Constructor por defecto

Proteger el constructor por defecto

La especificación JPA determina un constructor por defecto de las clases vinculadas, pero un constructor predeterminado rara vez tiene sentido en términos de modelo. Con él, se podría construir una instancia de entidad sin estado. Un constructor siempre debe salir de la instancia creada en su estado normal. Por lo tanto, debemos definir el constructor por defecto como protegido.

Acceso mediante campos

Especificar la vinculación objeto-relacional anontando los campos de la entidad directamente

Es recomendable especificar la vinculación objeto-relacional anontando los campos de la entidad directamente en lugar de anotar los métodos get/set, ya que resulta más limpia denotar la persistencia directamente sobre los datos, al ser estos sobre los que se realizan las operaciones de persistencia. También resulta más claro marcar un campo como transitorio, para indicar que no hay que mantenerlo, a marcar el método. Otro aspecto favorable es que, al anotar los campos, no importa si la lógica de negocio se deja fuera de los métodos, permitiendo escribir el nombre de estos métodos como se desee.

Caché de segundo nivel

Configurar la caché de segundo nivel

Hay que habilitar la caché de segundo nivel, definiendo de forma correcta los parámetros de configuración, para guardar los objetos de uso frecuente en la aplicación y conseguir mejoras en el rendimiento. Los objetos que se pueden guardar en esta caché son las Entidades(Datos) y las Querys(Consultas). Para configurar esta caché tendremos que especificar el tamaño, el tiempo de vida en caché de las entidades y si la caché está en un entorno distribuido o en una sóla máquina.

Modo de carga

Configurar el modo de carga de entidades

Se recomienda utilizar el modo de carga "EAGERLY" en aplicaciones web que utilicen JPA siempre y cuando el tamaño de las tablas no sea muy grande con respecto a la memoria y a la velocidad de acceso del servidro donde esté desplegada la aplicación.

Clase con claves primarias

Definir correctamente las clases con claves primarias

Un clase con clave primaria tiene que ser pública, siendo las propiedades de la clave primaria públicas. Además, la clase debe tener un constructor público por defecto, implementar los métodos hashCode y equals y ser serializable.
Asimismo, la clave primaria debe representarse y vincularse por campos múltiples o propiedades de la clase entidad, o representarse y vincularse como una clase embebida. Si la clave está compuesta por varios campos o propiedades, los nombres y tipos de los campos, o propiedades, de la clave primaria deben coincidir con las de la entidad.

Contenidos relacionados

Recursos
Área: Desarrollo » Construcción de Aplicaciones por Capas » Capa de Persistencia
Código Título Tipo Carácter
RECU-0180 Comparación de las tecnologías de acceso a datos Técnica Recomendado
Área: Desarrollo » Construcción de Aplicaciones por Capas » Capa de Persistencia » Java
Código Título Tipo Carácter
RECU-0176 Referencia JPA Referencia Recomendado