Cómo crear tablas temporales en Hibernación?
-
17-09-2020 - |
Pregunta
Objetivo
- Invocar un
CREATE TEMPORARY TABLE
declaración en modo de Hibernación sin usar SQL nativo.Esto significa que mediante HQL o Hibernación Api sólo. - Guardar objetos en la tabla temporal.
- Invocar un procedimiento almacenado que hace uso de las tablas existentes y la tabla temporal.
DROP
la tabla temporal cuando haya terminado.(Sé que no es necesario, pero creo que es un buen hábito a hacerlo).
De fondo
- Estoy muy familiarizado con SQL pero nuevo para Hibernar.
- Estoy obligado a usar el modo de Hibernación en un proyecto, porque, ustedes saben, la decisión de otra persona.
- Voy a guardar un formulario web a una base de datos de Oracle.
- El formulario web que contiene una tabla completa de los campos de texto (diseñado por alguien más), uno en cada celda.
- Cuando el usuario hace clic en
Save
, los valores DEBE se guardan en una sola transacción. - El formulario web está respaldada por una vista de base de datos.
- La vista de base de datos se crea a partir de una tabla de base de datos utilizando el AVE patrón.(Esto se hace así debido a que las columnas son de alguna manera dinámica.)
- Cada campo de texto en el formulario web es modelada por una fila en la tabla de base de datos.
- Mostrar el formulario web que se utiliza
SELECT
las declaraciones en la vista. - Actualización el formulario web que se utiliza
UPDATE
las declaraciones en la vista, que llama a laINSTEAD OF
el desencadenante de la vista. - Sólo cambia los valores se actualizan.Hay una pista de auditoría para cada actualización.
- Si cualquiera de los valores actualizados por otro usuario sin el aviso para el usuario, se deshace la transacción.Aquí está un ejemplo de un escenario de este tipo:
(I)
el valor de a es4
cuando el usuario se muestra el formulario de la web(II)
otro usuario actualiza el mismo campo5
(III)
el primer usuario que actualiza el campo a2
y envía el formulario de la web.
Originalmente Propuesta De Solución
- Uso de AJAX (jQuery) para detectar cambios en los campos de texto, y presentar sólo aquellos cambiado por el usuario.
- Sin embargo, los cambios realizados por otro usuario deben ser detectado en la base de datos.
La solución Supone que funciona Mejor
- Cuando el usuario hace clic en
Save
, crear una tabla temporal (una tabla temporal es una tabla sólo se ve por la actual sesión o conexión, y se borra automáticamente cuando se cierra la sesión / luego de la desconexión) y guardar los objetos (las células) en la tabla temporal. - Iniciar una transacción.
- Bloqueo de algunas de las tablas existentes (o sólo las filas relacionadas, para mejorar el rendimiento).
- Comparar los datos presentados con los datos existentes.
- Si cualquier desapercibido cambio fue hecho, deshacer la transacción.
- Actualización de la necesaria filas.
- Confirmar la transacción y desbloquear las tablas.
- Caída de la tabla temporal.
¿Hay alguna idea?
Solución
Esto no responde a sus requisitos exactos, pero dado que no ha habido intentos de una respuesta...ha considerado el uso de un temporal CSV tabla usando algo como http://csvjdbc.sourceforge.net/.
Mientras no se ajusta a la necesidad de hacerlo a través de hibernación, es la base de datos e independientes de la plataforma de la cruz.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow