Frage

Ziel

  1. Rufen Sie a auf CREATE TEMPORARY TABLE Anweisung im Ruhezustand ohne Verwendung von nativem SQL.Das bedeutet, dass nur HQL- oder Hibernate-APIs verwendet werden.
  2. Speichern Sie Objekte in der temporären Tabelle.
  3. Rufen Sie eine gespeicherte Prozedur auf, die vorhandene Tabellen und die temporäre Tabelle nutzt.
  4. DROP die temporäre Tabelle, wenn Sie fertig sind.(Ich weiß, dass es nicht notwendig ist, aber ich denke, es ist eine gute Angewohnheit, dies zu tun.)

Hintergrund

  1. Ich bin sehr vertraut mit SQL, aber neu bei Hibernate.
  2. Ich bin gezwungen, Hibernate in einem Projekt zu verwenden, weil jemand eine Entscheidung getroffen hat.
  3. Ich werde ein Webformular in einer Oracle-Datenbank speichern.
  4. Das Webformular enthält eine Tabelle voller Textfelder (von jemand anderem entworfen), eines in jeder Zelle.
  5. Wenn der Benutzer klickt Save, die Werte MUSS in einer einzigen Transaktion gespeichert werden.
  6. Das Webformular wird durch eine Datenbankansicht gesichert.
  7. Die Datenbankansicht wird mithilfe des EAV-Musters aus einer Datenbanktabelle erstellt.(Dies geschieht, weil die Spalten irgendwie dynamisch sind.)
  8. Jedes Textfeld im Webformular wird durch eine Zeile in der Datenbanktabelle modelliert.
  9. Anzeige der Webformularverwendungen SELECT Aussagen zur Sicht.
  10. Aktualisieren der Webformularverwendungen UPDATE Anweisungen zur Ansicht, die die aufruft INSTEAD OF Auslöser der Ansicht.
  11. Es werden nur geänderte Werte aktualisiert.Für jedes Update gibt es einen Audit-Trail.
  12. Wenn einer der Werte von einem anderen Benutzer ohne dessen Benachrichtigung aktualisiert wird, wird die Transaktion zurückgesetzt.Hier ist ein Beispiel für ein solches Szenario: (I) der Wert von a ist 4 wenn der Benutzer das Webformular anzeigt (II) Ein anderer Benutzer aktualisiert dasselbe Feld auf 5 (III) Der erste Benutzer aktualisiert das Feld auf 2 und sendet das Webformular.

Ursprünglich vorgeschlagene Lösung

  1. Verwenden Sie AJAX (jQuery), um Änderungen in den Textfeldern zu erkennen und nur die vom Benutzer geänderten Daten zu übermitteln.
  2. Allerdings müssen von einem anderen Benutzer vorgenommene Änderungen in der Datenbank erkannt werden.

Lösung soll besser funktionieren

  1. Wenn der Benutzer klickt Save, erstellen Sie eine temporäre Tabelle (eine temporäre Tabelle ist eine Tabelle, die nur von der aktuellen Sitzung/Verbindung gesehen wird und automatisch gelöscht wird, wenn die Sitzung geschlossen/nach der Trennung wird) und speichern Sie die Objekte (Zellen) in der temporären Tabelle.
  2. Starten Sie eine Transaktion.
  3. Sperren Sie einige der vorhandenen Tabellen (oder aus Leistungsgründen nur verwandte Zeilen).
  4. Vergleichen Sie die übermittelten Daten mit den vorhandenen Daten.
  5. Wenn eine unbemerkte Änderung vorgenommen wurde, machen Sie die Transaktion rückgängig.
  6. Aktualisieren Sie die erforderlichen Zeilen.
  7. Bestätigen Sie die Transaktion und entsperren Sie die Tabellen.
  8. Löschen Sie die temporäre Tabelle.

Gibt es irgendwelche Ideen?

War es hilfreich?

Lösung

Dies entspricht nicht Ihren genauen Anforderungen, da es jedoch keine Antwortversuche gab ...Haben Sie darüber nachgedacht, eine temporäre CSV-Tabelle mit etwas zu verwenden? http://csvjdbc.sourceforge.net/.

Es entspricht zwar nicht der Anforderung, dies im Ruhezustand durchzuführen, ist jedoch datenbankunabhängig und plattformübergreifend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top