Bonjour
J'utilise hibernate 3.1 dans une application web via le "HibernateDaoSupport" de spring. J'utilise aussi la configuration par annotation Java 5, j'ai un base MySQL et j'utilise le pool de connection apache DBCP.
Dans un DAO, je recherche un utilisateur par son login (typiquement une fenetre de logging) mais, meme en recherchant un utilisateur qui existe bien, je resultat est toujours vide.
Voici le code de mon DAO :
Code:
public Utilisateur trouverParNomUtilisateur(final String nomUtilisateur) {
Criteria criteria = this.getSession().createCriteria(Utilisateur.class);
criteria.add(Restrictions.eq("nomUtilisateur", nomUtilisateur));
List utilisateurs = criteria.list();
if (null != utilisateurs && utilisateurs.size() > 0) {
return (Utilisateur) utilisateurs.get(0);
} else {
return null;
}
Et voici les log hibernate qui correspondent, vous pouvez remarquer que la classe Loader traite 0 ligne dans le ResultSet alors que la meme requete directement sous MySQL retourne bien la bonne ligne.
Code:
22:38:50,864 DEBUG org.hibernate.impl.SessionImpl:271 - opened session at timestamp: 4631735217618944
22:38:50,865 DEBUG org.hibernate.jdbc.AbstractBatcher:309 - about to open PreparedStatement (open PreparedStatements: 0, globally: 1)
22:38:50,865 DEBUG org.hibernate.jdbc.ConnectionManager:309 - opening JDBC connection
22:38:50,878 DEBUG org.hibernate.SQL:344 - select this_.id as id0_0_, this_.nomutilisateur as nomutili2_0_0_, this_.motdepasse as motdepasse0_0_, this_.actif as actif0_0_ from utilisateur this_ where this_.nomutilisateur=?
22:38:50,881 DEBUG org.hibernate.jdbc.AbstractBatcher:413 - preparing statement
22:38:50,883 DEBUG org.hibernate.type.StringType:79 - binding 'admin' to parameter: 1
22:38:50,884 DEBUG org.hibernate.jdbc.AbstractBatcher:325 - about to open ResultSet (open ResultSets: 0, globally: 0)
22:38:50,884 DEBUG org.hibernate.loader.Loader:682 - processing result set
22:38:50,885 DEBUG org.hibernate.loader.Loader:709 - done processing result set (0 rows)
22:38:50,885 DEBUG org.hibernate.jdbc.AbstractBatcher:332 - about to close ResultSet (open ResultSets: 1, globally: 1)
22:38:50,886 DEBUG org.hibernate.jdbc.AbstractBatcher:317 - about to close PreparedStatement (open PreparedStatements: 1, globally: 2)
22:38:50,886 DEBUG org.hibernate.jdbc.AbstractBatcher:459 - closing statement
22:38:50,889 DEBUG org.hibernate.loader.Loader:839 - total objects hydrated: 0
22:38:50,889 DEBUG org.hibernate.engine.StatefulPersistenceContext:784 - initializing non-lazy collections
22:38:50,890 DEBUG org.hibernate.jdbc.JDBCContext:231 - after autocommit
22:38:50,890 DEBUG org.hibernate.impl.SessionImpl:424 - after transaction completion
J'ai egalement essayer de court-circuiter hibernate dans le DAO en recuperant la connexion a la base sous jacente et en faisant la requete moi meme. Le resultat est alors correct puisque je retrouve bien mon utlisanteur.