Question

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 uniquement.
  2. 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).

Arrière-plan

  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 sa 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. Afficher le formulaire web utilise SELECT les déclarations sur la vue.
  10. Mise à jour du formulaire web utilise UPDATE les déclarations sur la vue, qui appelle à la INSTEAD OF le déclencheur de la vue.
  11. Seules les valeurs modifiées 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 5 (III) le premier utilisateur met à jour le champ de 2 et soumet le formulaire web.

À L'Origine, La Solution Proposée

  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. 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. Supprimer la table temporaire.

Est-il des idées?

Était-ce utile?

La solution

Cela ne répond pas exactement à vos exigences, mais étant donné qu'il n'y a pas eu de tentatives de réponse...avez-vous songé à l'aide d'un CSV temporaire table à l'aide de quelque chose comme http://csvjdbc.sourceforge.net/.

Alors qu'il n'est pas conforme à l'exigence de le faire par le biais de mise en veille prolongée, il est de base de données agnostique et multi-plateforme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top