Mon équipe développe une grande application Java qui interroge une base de données MySQL (dans différentes classes et modules). Je voudrais savoir s'il existe un modèle qui me permet d'être averti lors de la compilation s'il y a des requêtes qui se réfèrent à une mauvaise structure de table (par exemple si je supprime ou ajoute un champ sur une table et la chaîne de requête pour éviter les erreurs d'exécution. Cela devrait également fonctionner pour les requêtes JOIN.Modèle pour la découverte à la compilation de requêtes dangereuses/incorrectes
Répondre
Il existe un outil open-source appelé DODS (Data Object Design Studio) qui pourrait faire ce que vous voulez. L'outil DODS faisait à l'origine partie du projet de serveur d'applications Java Enhydra, et depuis que la société soutenant ce projet est allé à kablooey en 2002, DODS a été hébergé et maintenu à ObjectWeb. Quoi qu'il en soit, c'est open-source (LGPL).
http://forge.objectweb.org/projects/dods
Le concept est que vous décrivez votre schéma dans un fichier XML, et DODS génère des classes Java POJO avec lequel vous pouvez interroger et manipuler les tables de base de données. Bien sûr, chaque fois que vous modifiez votre schéma, vous devez réexécuter DODS pour générer à nouveau les classes ORM et recompiler votre application à leur place. Le résultat est que si une table ou une colonne disparaît et que votre application interroge des métadonnées de base de données qui n'existent plus, vous obtenez une erreur de compilation, car votre code appelle maintenant une classe ou une méthode correspondante. existe plus longtemps.
Je dirais que la réponse simple est "non". La réponse la plus complète est «oui, dans une certaine mesure», selon votre volonté de sauter dans les cerceaux. À moins que vous n'ayez une représentation java de votre schéma de base de données, vous ne serez jamais en mesure d'obtenir une notification de compilation si vos requêtes sont erronées (ces classes peuvent être générées). En outre, vous devez utiliser ces classes pour générer vos requêtes, de sorte que la méthode que vous utilisez aujourd'hui (chaînes de requête) doit être abandonnée. Pour pouvoir utiliser les classes Java pour créer vos requêtes, vous devez également utiliser des astuces. LiquidForm utilise les astuces requises pour générer des requêtes JPA, mais je n'ai pas vu de bibliothèque similaire pour construire des requêtes SQL (LiquidForm est nouveau et plutôt brillant). Vous devriez en fait construire une bibliothèque similaire. Donc, comme vous le voyez, obtenir des avertissements de compilation lors de la construction de SQL est difficile, mais pas impossible (seulement presque impossible). Mais même si vous devriez être capable de créer ce que je suggère, votre représentation java du schéma doit être mise à jour immédiatement après un changement de schéma, donc la génération de classes java devrait être intégrée dans votre IDE ou outil de construction.
Je vous suggère plutôt d'avoir de bons tests unitaires qui remarqueront que vos requêtes deviennent illégales suite à un changement de schéma. C'est la façon la plus courante d'obtenir ce que vous voulez. Aussi, si vous décidez de "mettre à niveau" vers JPA, vous pouvez utiliser LiquidForm pour obtenir ce que vous voulez.
Querydsl est similaire à LiquidForm et prend en charge les backends JPA/Hibernate et SQL.
Pour la version SQL, nous supportons actuellement MySQL (5.? Testé), Oracle (testé 10g) et HSQLDB.
En bref une requête comme celui-ci
select count(*) from test where name = null
deviendrait
long count = query.from(test).where(test.name.isnull()).count();
Querydsl SQL utilise la génération de code pour refléter les schémas SQL dans les classes Java.
- 1. F6 pour la compilation?
- 2. Résolution DNS pour la découverte de service WCF
- 3. Compilation conditionnelle pour travailler à la maison
- 4. Questions pour la compilation à LLVM
- 5. Outil de découverte de test pour .NET
- 6. état à la compilation inconnu
- 7. Performances ASP.net et requêtes de compilation
- 8. sucre pour la création d'Syntactic objet de compilation à Scala
- 9. Détection de l'architecture de la CPU à la compilation
- 10. Recherché: une idée de modèle C++ pour attraper un problème, mais au moment de la compilation?
- 11. Compilation de la version PowerPoint
- 12. Problème compilation du code modèle de C
- 13. C décorateurs de fonction (wrappers) à la compilation
- 14. Comment fonctionne la compilation JIT pour la mise en cache?
- 15. Découverte de la hauteur de ligne de la ligne GridView autosized dans ASP.NET
- 16. LinqToSql - éviter les requêtes excessives à la base de données
- 17. La combinaison LinqToSql requêtes
- 18. Insensible à la casse Requêtes ClearQuest
- 19. Problèmes de compilation de Groovy à partir de la source
- 20. Découverte du type de mémoire
- 21. Modèle de conception adapté à la tâche
- 22. Utilisation de la génération de requêtes NHibernate pour SQL
- 23. Réflexion et compilation pour obtenir la valeur de MemberExpression
- 24. Découverte des trames Javascript
- 25. Calculer float à la compilation en utilisant des modèles
- 26. Rôle externeProviders et la compilation?
- 27. C++ erreur liée à la définition de compilation constructeur/destructor
- 28. Forcer la compilation propre ASP.NET
- 29. Envoi basé sur le type à la compilation
- 30. Une expérience avec la compilation de VBScript?