Buenas prácticas en la construcción de la capa de persistencia con JPA
- Área: Capa de Persistencia
- Grupo: Java
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
- Tecnologías: JPA
Se deben tener en cuenta las siguientes indicaciones al construir una capa de persistencia mediante JPA
Pautas
Título | Carácter |
---|---|
Modelo de grano fino | Obligatoria |
Clases Entity serializables | Obligatoria |
Constructor por defecto | Obligatoria |
Acceso mediante campos | Recomendada |
Caché de segundo nivel | Obligatoria |
Modo de carga | Recomendada |
Clase con claves primarias | Obligatoria |
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
Código | Título | Tipo | Carácter | |
---|---|---|---|---|
LIBP-0047 | Buenas prácticas en las consultas con JPA | Libro de pautas | Directriz | Obligatoria |
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0180 | Comparación de las tecnologías de acceso a datos | Técnica | Recomendado |
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0176 | Referencia JPA | Referencia | Recomendado |