2010-12-09 35 views
0

Je dois parcourir une base de données et la modifier selon une logique. Le problème ressemble à ceci. J'ai une table d'historique dans ma base de données et je dois la modifier. Avant de modifier quoi que ce soit je dois regarder si un objet (qui a plusieurs lignes dans l'historique) a un certain état, disons 4 ou 9. S'il avait l'état 4 ou 9 alors je dois vérifier les lignes entre les rangée et l'état suivant 4 ou 9 rangs. Si une telle ligne (entre ces états) a une valeur spécifique dans une colonne spécifique alors je fais quelque chose dans la rangée suivante. J'espère que c'est assez simple pour vous donner une idée. Je dois faire cette vérification pour tous les objets. Gardez à l'esprit que tout objet peut être modifié n'importe où dans son cycle de vie (bien sûr jusqu'à ce qu'il atteigne un état final). J'utilise SQL Sever 2005 et Hibernate. AFAIK Je ne peux pas faire une vérification aussi compliquée dans Transact SQL! Alors que me recommanderiez-vous de faire? Jusqu'à présent, j'ai pensé à le faire en tant que test JUnit. Cela aurait l'avantage d'avoir Hibernate pour m'aider à faire les modifications et j'aurais Java pour les listes et autres structures de données dont je pourrais avoir besoin et qui n'existent pas en SQL. Si je le fais en tant que test JUnit, je ne perds pas mes fichiers de mapping! Je suis curieux de savoir quelles approches utiliseriez-vous?Modification avancée de la base de données "script" - comment le faire

Répondre

0

Je pense que vous devriez pouvoir utiliser des curseurs pour gérer les contrôles compliqués dans SQL Server. Vous n'avez pas mentionné à quelle fréquence vous devez faire cela, mais si c'est une chose ponctuelle, vous pouvez soit le faire en Java ou SQL Server, en fonction de votre niveau de confort.

Si cette vérification doit être appliquée à chaque opération CRUD, le déclencheur de base de données est peut-être le chemin à parcourir. Si la logique peut changer fréquemment au fil du temps, je préférerais écrire les vérifications dans Hibernate en supposant que personne ne touchera directement la base de données. Puis-je avoir des listes dans SQL?

+0

Je veux dire quelque chose dans lequel je peux stocker mes identifiants d'objets par exemple? – Atticus

+0

il n'y a pas de structure de données de liste dans SQL, ou du moins je ne suis pas au courant, mais vous pouvez créer des tables temporaires pour contenir la liste de données, la manipuler, puis supprimer les tables temporaires. – limc

+0

Ouais, c'est une bonne idée. Merci! – Atticus