JPA / Hibernate: validation basée sur code des requêtes jpa
Question
Quelle est la bonne façon de valider une requête jpa par programme. Hibernate valide toutes les requêtes nommées basées sur des annotations sur des entités. Mais comment puis-je appeler cette routine de validation sur les requêtes jpa générées par programme pour vérifier les erreurs?
@Entity public class Foo { @Id public int id; public String name; }
main(...) { Query q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); // validate q here }
La solution
Ne pas. L'intégration teste votre code avec une vraie base de données avec le même schéma que votre environnement de production.
Pensez-y: si vous créez une requête mal formée, il s'agit d'un bogue de programmation . Qu'allez-vous faire avec l'information? Indiquer à l'utilisateur qu'une requête JPA est mal formée? Tout ce que vous pouvez faire de manière réaliste est de consigner l'erreur et de dire à l'utilisateur "que quelque chose de mauvais est arrivé". Vous saurez que c'est une requête mal formée quand vous vérifierez les journaux plus tard, de toute façon ...
Modifier
Cela pourrait également valoir la peine d’enquêter sur l’appel createQuery ()
en lui fournissant des données incorrectes - le javadoc here suggère qu'il peut générer une HibernateException
, et je ne suis pas sûr ce qu’il pourrait faire avec une chaîne autre que la valider ...
Autres conseils
Vous pouvez utiliser createQuery ou vous devez indiquer le nom de votre classe lorsque vous écrivez un fichier JPQL.