Bonjour,
Je rencontre un problème concernant l'utilisation des énumération dans un requête HQL.
La requête est la suivante :
Code:
SELECT m FROM MaClasse WHERE m.type = ?
request.setParameter(Type.TEST);
L'attribut type de MaClasse est une énumération définit grace à l'annotation suivante :
Code:
@Enumerated(EnumType.STRING)
La requête fonctionne correctement lors que je lance mes tests unitaires avec un jeux de données précis et me retourne un ensemble de résultats cohérent.
Après déploiement de mon application graphique (JSF) sous JBoss (4.2.3), la requête ne retourne plus aucun résultat alors que le jeux de données est le même.
Après activation du mode showSql d'hibernate, je constate que les requête générées sont sensiblement différentes selon l'environnement d'appel (application JSF ou test JUnit). Les requêtes générés sont différentes structurellement mais l'exécution sous MySQL Query Browser les 2 requêtes donnent le même résultats.
Chose étrange, si j'exécute la requête même requête en passant le nom de l'énumération (String) au lieu de l'objet Enumeration :
Code:
SELECT m FROM MaClasse WHERE m.type = ?
request.setParameter(Type.TEST.name());
Mon test JUnit échoue car Hibernate n'arrive pas à faire un Cast de String en Enum.
Mon application JSF fonctionne correctement et la requête retourne les résultats (???? pourquoi ????).
Je ne comprend pas d'ou peut venir le problème.
Si quelqu'un a rencontré un problème similaire. Personnellement je suspecte une différence au niveau des dépendances (Gérée par Maven 2) mais j'ai vérifié plusieurs fois (j'ai même remplacé les librairies de JBoss) mais rien n'y fait je ne trouve pas.
Dépendances Maven utilisées :
- hibernate-3.2.4.sp1
- hibernate-entitymanager-3.2.1.ga
- hibernate-annotation-3.2.1.ga
- persistence-api-1.0
- mysql-connector-java-5.1.8
Serveur d'application : JBoss 4.2.3
Serveur de Base de données : MySQL 5.1