Domanda

Obiettivo

  1. Invocare a CREATE TEMPORARY TABLE istruzione in Hibernate senza utilizzare SQL nativo.Ciò significa utilizzare solo API HQL o Hibernate.
  2. Salva gli oggetti nella tabella temporanea.
  3. Richiamare una procedura memorizzata che utilizza le tabelle esistenti e la tabella temporanea.
  4. DROP la tabella temporanea al termine.(So ​​che non è necessario, ma penso che sia una buona abitudine farlo.)

Sfondo

  1. Ho molta familiarità con SQL ma sono nuovo in Hibernate.
  2. Sono costretto a utilizzare Hibernate in un progetto a causa, sai, della decisione di qualcuno.
  3. Salverò un modulo Web in un database Oracle.
  4. Il modulo web contiene una tabella piena di campi di testo (progettati da qualcun altro), uno in ogni cella.
  5. Quando l'utente fa clic Save, i valori DOVERE essere salvati in un'unica transazione.
  6. Il modulo Web è supportato da una visualizzazione del database.
  7. La vista del database viene creata da una tabella del database utilizzando il modello EAV.(Lo facciamo perché le colonne sono in qualche modo dinamiche.)
  8. Ogni campo di testo nel modulo Web è modellato da una riga nella tabella del database.
  9. Visualizzazione del modulo Web utilizza SELECT dichiarazioni sulla vista.
  10. L'aggiornamento del modulo web utilizza UPDATE dichiarazioni sul punto di vista, che chiama il INSTEAD OF innesco della vista.
  11. Vengono aggiornati solo i valori modificati.Esiste una traccia di controllo per ogni aggiornamento.
  12. Se uno qualsiasi dei valori viene aggiornato da un altro utente senza preavviso, viene eseguito il rollback della transazione.Ecco un esempio per uno scenario del genere: (I) il valore di a è 4 quando l'utente visualizza il modulo web (II) un altro utente aggiorna lo stesso campo a 5 (III) il primo utente aggiorna il campo 2 e invia il modulo web.

Soluzione originariamente proposta

  1. Utilizza AJAX (jQuery) per rilevare le modifiche nei campi di testo e inviare solo quelle modificate dall'utente.
  2. Tuttavia, le modifiche apportate da un altro utente devono essere rilevate nel database.

La soluzione dovrebbe funzionare meglio

  1. Quando l'utente fa clic Save, creare una tabella temporanea (una tabella temporanea è una tabella vista solo dalla sessione/connessione corrente e viene eliminata automaticamente quando la sessione viene chiusa/al momento della disconnessione) e salvare gli oggetti (celle) nella tabella temporanea.
  2. Avvia una transazione.
  3. Blocca alcune delle tabelle esistenti (o solo le righe correlate, per motivi di prestazioni).
  4. Confronta i dati inviati con i dati esistenti.
  5. Se è stata apportata una modifica inosservata, ripristinare la transazione.
  6. Aggiorna le righe necessarie.
  7. Effettua la transazione e sblocca i tavoli.
  8. Elimina la tabella temporanea.

Ci sono idee?

È stato utile?

Soluzione

Ciò non risponde esattamente alle tue esigenze, ma dato che non ci sono stati tentativi di risposta...hai considerato l'utilizzo di una tabella CSV temporanea utilizzando qualcosa di simile http://csvjdbc.sourceforge.net/.

Sebbene non sia conforme al requisito di farlo tramite l'ibernazione, è indipendente dal database e multipiattaforma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top