Comment créer des tables temporaires en veille prolongée?

Objectif

  1. Invoquer un CREATE TEMPORARY TABLE déclaration prolongée sans l'aide de SQL natif. Cela signifie que l'aide HQL ou veille prolongée Api.
  2. De sauvegarder les objets de la table temporaire.
  3. Appeler une procédure stockée qui rend l'utilisation de tables existantes et la table temporaire.
  4. DROP la table temporaire lorsque vous avez terminé. (Je sais qu'il n'est pas nécessaire, mais je pense que c'est une bonne habitude de le faire).

Fond

  1. Je suis très familier avec SQL mais la nouvelle mise en veille prolongée.
  2. Je suis obligé d'utiliser Hibernate dans un projet parce que, vous savez, quelqu'un de décision.
  3. Je vais enregistrer un formulaire web à une base de données Oracle.
  4. Le formulaire web contient une table avec plein de champs de texte (conçu par quelqu'un d'autre), un dans chaque cellule.
  5. Lorsque l'utilisateur clique sur Save, les valeurs DOIT être enregistré en une seule transaction.
  6. Le formulaire web est soutenu par une vue de base de données.
  7. La vue de base de données est créée à partir d'une table de base de données en utilisant le modèle EAV.
    (C'est parce que les colonnes sont d'une certaine manière dynamique.)
  8. Chaque champ de texte dans le formulaire web est modélisé par une ligne dans la table de base de données.
  9. Affichage du formulaire web utilise SELECT déclarations sur la vue.
  10. Mise à jour du formulaire web utilise UPDATE déclarations sur la vue, qui appelle à la INSTEAD OF déclenchement de la vue.
  11. Seulement changé les valeurs sont mises à jour. Il y a une piste de vérification pour chaque mise à jour.
  12. Si les valeurs sont mises à jour par un autre utilisateur insu de l'utilisateur, avis, la transaction est annulée. Voici un exemple pour un tel scénario: (I) la valeur de a est 4 lorsque l'utilisateur affiche le formulaire web (II) un autre utilisateur met à jour la même champ de 5 (III) le premier utilisateur met à jour le champ de 2 et soumet le formulaire web.

Initialement Proposé La Solution

  1. Utiliser AJAX (jQuery) pour détecter les changements dans les champs de texte, et n'envoyer que ceux modifiés par l'utilisateur.
  2. Toutefois, les modifications apportées par un autre utilisateur doivent être détectés dans la base de données.

Solution Censé Mieux Travailler

  1. Lorsque l'utilisateur clique sur Save, créer une table temporaire (une table temporaire est une table seulement vu par l'actuelle session /connexion, et est supprimé automatiquement lorsque la session est fermée /lors de la déconnexion) et enregistrez les objets (les cellules) dans la table temporaire.
  2. Démarrer une transaction.
  3. De verrouillage de certaines des tables existantes (ou seulement les lignes associées, pour la performance).
  4. Comparer les données avec les données existantes.
  5. Si tout inaperçu changement a été fait, d'annuler la transaction.
  6. Mettre à jour ses lignes.
  7. Valider la transaction et déverrouiller les tables.
  8. Chute de la table temporaire.

Est-il des idées?

Oracle tables temporaires ne sont pas supprimés lors de la fermeture de la session. Ils sont permanents. Les données sont uniquement visibles lorsque la session est vivant. Une fois que la session se ferme ses données disparaît, mais le tableau reste.

OriginalL'auteur Siu Ching Pong -Asuka Kenji- | 2010-07-19