Pergunta

Objetivo

  1. Invocar um CREATE TEMPORARY TABLE instrução no Hibernate sem usar o SQL nativo.O que significa usar HQL ou de Hibernação APIs só.
  2. Guardar objetos para a tabela temporária.
  3. Chamar um procedimento armazenado que faz uso de tabelas existentes e a tabela temporária.
  4. DROP a tabela temporária quando tiver terminado.(Eu sei que isso não é necessário, mas eu acho que é um bom hábito para fazer isso).

Fundo

  1. Eu estou muito familiarizado com SQL, mas novo para o Hibernate.
  2. Eu sou forçado a usar o Hibernate em um projeto porque, você sabe, alguém da sua decisão.
  3. Eu vou guardar um formulário da web para um banco de dados Oracle.
  4. O formulário da web contém uma tabela completa de campos de texto (desenhado por outra pessoa), uma em cada célula.
  5. Quando o usuário clica Save, os valores DEVE ser salvo em uma única transação.
  6. O formulário da web é feito por uma exibição de banco de dados.
  7. O banco de dados do modo de exibição é criado a partir de uma tabela de banco de dados usando o EAV padrão.(Isso é feito porque as colunas são de alguma forma dinâmica.)
  8. Cada campo de texto no formulário da web é modelado por uma linha na tabela de banco de dados.
  9. Exibindo o formulário da web usa SELECT instruções sobre o modo de exibição.
  10. A atualização usa o formulário da web UPDATE instruções sobre o modo de exibição, o que chama a INSTEAD OF ativador do vista.
  11. Só mudou os valores são atualizados.Há uma trilha de auditoria para cada atualização.
  12. Se os valores são actualizados por outro utilizador, sem o aviso prévio, a transação é revertida.Aqui está um exemplo de um tal cenário: (I) o valor de a é 4 quando o usuário exibe o formulário da web (II) outro usuário atualiza o mesmo campo para 5 (III) o primeiro usuário atualiza o campo para 2 e submete o formulário da web.

Originalmente Proposta De Solução

  1. Usar AJAX (jQuery) para detectar alterações nos campos de texto, e apresentar apenas aqueles que foram alterados pelo usuário.
  2. No entanto, as alterações feitas por outro usuário precisa ser detectados no banco de dados.

Solução Deveria Funcionar Melhor

  1. Quando o usuário clica Save, criar uma tabela temporária (uma tabela temporária é uma tabela apenas visto pelo atual conexão / sessão, e é interrompida automaticamente quando a sessão é fechada / a desconexão) e guardar os objetos (células) para a tabela temporária.
  2. Iniciar uma transação.
  3. Bloqueio de algumas das tabelas existentes (ou apenas linhas relacionadas, para o desempenho).
  4. Compare os dados apresentados com os dados existentes.
  5. Se qualquer despercebido alteração foi feita, reverter a transação.
  6. Atualização necessária linhas.
  7. Confirmar a transação e desbloquear as tabelas.
  8. Descartar a tabela temporária.

Existe alguma ideia?

Foi útil?

Solução

Este não atender seus requisitos, mas, dado que não houve nenhuma tentativa de uma resposta...você já pensou em usar uma temporária CSV tabela usando algo como http://csvjdbc.sourceforge.net/.

Enquanto ele não está de acordo com a exigência de fazê-lo através do hibernate, ele é banco de dados e independentes de plataforma cruzada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top