JPA : Generación de Llave Primaria
En este post comentaremos acerca de las modalidades para la generación de un PK simple ( ojo que también hay PK's compuestas ).
Además de la anotación @Id se emplea la anotación @GeneratedValued con el atributo "strategy". Básicamente hay cuatro valores para el atributo:
- strategy=GenerationType.AUTO
- strategy=GenerationType.TABLE
- strategy=GenerationType.SEQUENCE
- strategy=GenerationType.IDENTITY
El AUTO
le dice a JPA que busque la mejor forma de generación de secuencias.
Dependiendo de la base de datos a usar se puede manejar "secuencias"
(oracle) o "autoincrementos" (MySQL). Para no complicarnos mucho, en
este post sólo mencionaremos el uso de la opción TABLE, que es
una buena alternativa cuando queremos controlar la generación de la
secuencias en una tabla ( algo así como una tabla de correlativos ).
Forma de utilización #1:
Si sólo se especifica la anotación sin indicar la tabla, JPA busca (o genera ) una tabla llamada "sequence". La
tabla requiere de dos columnas: una conteniendo el identificador para
generar la secuencia y la otra columna contiene el último valor
generado. Cada fila de la tabla es un generador diferente para los ID’s.
Ejemplo:
Forma de utilización #2:
¿ Qué sucede si deseamos indicar una tabla específica ?. Debemos agregar una anotación más: @TableGenerator
Ahora
debemos indicar algunas características de la tabla (que si bien sigue
manteniendo la estructura mencionada en la forma de uso #1 ), requiere
el "mapeo" de algunas cosas:
A
diferencia de la estrategia IDENTITY, en ésta estrategia el valor de la
PK ya está disponible desde el momento en que se hace el persist.
¿ Que opinas ?
Por favor prueba las otras estrategias de generación de PK y coloca tus comentarios.
No hay comentarios:
Publicar un comentario