Pregunta

Objetivo

  1. 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.
  2. Guardar objetos en la tabla temporal.
  3. Invocar un procedimiento almacenado que hace uso de las tablas existentes y la tabla temporal.
  4. DROP la tabla temporal cuando haya terminado.(Sé que no es necesario, pero creo que es un buen hábito a hacerlo).

De fondo

  1. Estoy muy familiarizado con SQL pero nuevo para Hibernar.
  2. Estoy obligado a usar el modo de Hibernación en un proyecto, porque, ustedes saben, la decisión de otra persona.
  3. Voy a guardar un formulario web a una base de datos de Oracle.
  4. El formulario web que contiene una tabla completa de los campos de texto (diseñado por alguien más), uno en cada celda.
  5. Cuando el usuario hace clic en Save, los valores DEBE se guardan en una sola transacción.
  6. El formulario web está respaldada por una vista de base de datos.
  7. 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.)
  8. Cada campo de texto en el formulario web es modelada por una fila en la tabla de base de datos.
  9. Mostrar el formulario web que se utiliza SELECT las declaraciones en la vista.
  10. Actualización el formulario web que se utiliza UPDATE las declaraciones en la vista, que llama a la INSTEAD OF el desencadenante de la vista.
  11. Sólo cambia los valores se actualizan.Hay una pista de auditoría para cada actualización.
  12. 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 es 4 cuando el usuario se muestra el formulario de la web (II) otro usuario actualiza el mismo campo 5 (III) el primer usuario que actualiza el campo a 2 y envía el formulario de la web.

Originalmente Propuesta De Solución

  1. Uso de AJAX (jQuery) para detectar cambios en los campos de texto, y presentar sólo aquellos cambiado por el usuario.
  2. Sin embargo, los cambios realizados por otro usuario deben ser detectado en la base de datos.

La solución Supone que funciona Mejor

  1. 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.
  2. Iniciar una transacción.
  3. Bloqueo de algunas de las tablas existentes (o sólo las filas relacionadas, para mejorar el rendimiento).
  4. Comparar los datos presentados con los datos existentes.
  5. Si cualquier desapercibido cambio fue hecho, deshacer la transacción.
  6. Actualización de la necesaria filas.
  7. Confirmar la transacción y desbloquear las tablas.
  8. Caída de la tabla temporal.

¿Hay alguna idea?

¿Fue útil?

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
scroll top