domingo, 18 de septiembre de 2011

ADF BC: Valor procedente de una Secuencia

Hola.

Hoy os traigo tres formas distintas de establecer el valor de un atributo de una Entity Object al valor de una secuencia de base de datos.

Cambiando el tipo de dato del atributo a DBSequence.

Esta solución consiste en cambiar el tipo de dato del atributo de nuestra Entity Object a DBSequence.
Al realizar este cambio podemos observar en la parte inferior de la pantalla de propiedades se ha habilitado la posibilidad de configurar el nombre de la secuencia de base de datos que deseamos utilizar para dicho atributo.

Atributo de entidad con Type: DBSequence
No genera el valor final de la secuencia hasta que se realiza commit. Por ello si se contribuyen tablas asociadas a la del valor autogenerado pueden encontrarse valores negativos temporales hasta que se realice el commit de los datos.

Programáticamente en la creación de la fila

Esta solución consiste en sobrescribir el método create de una fila y forzar la llamada a la secuencia de base de datos para establecer el valor del campo deseado.
Para ello se debe generar la clase Java que representa la entidad incluyendo el Create Method.

Generación de la clase Java que define la Entidad
Y seguidamente incluir en el código del método create la llamada a la secuencia de base de datos deseada y asignarle el valor al campo correspondiente de la entidad.

Método create de la Entity

Finalmente es necesario actualizar el atributo de la entidad para que refresque después de la inserción.

Refresco después de inserción
Esta opción genera un valor siempre que se comience una operación de inserción en base de datos por lo que si se cancela la operación de inserción, ese valor será un valor perdido puesto que en la próxima inserción se generará el siguiente valor.

Mediante una Groovy Expression

Para esta solución hay que generar primero la clase que define la Entidad (como hicimos en la solución anterior). Y crear un método que obtiene el valor de la secuencia.

Método que genera el valor de la DBSequence

Seguidamente editar las propiedades del atributo de la entidad para que obtenga su valor procedente de dicho método mediante una Groovy Expression.

Groovy expression que invoca a la DBSequence
Personalmente nunca he usado esta opción.

Ejemplo desarrollado en JDeveloper 11.1.1.4.

Un saludo :).

No hay comentarios:

Publicar un comentario