Problème requête HQL. [Résolu]

Signaler
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011
-
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011
-
Bonjour, Je travail actuellement sur une application J2EE avec STRUTS 1 et HIBERNATE.
Lors d'un rafraichissement d'une page, le contenu de la requête HQL change continuellement... Le jeu de donnée n'est pas modifier et pourtant sois la requête affiche tous, sois en partie... J'ai pensé à un problème de cache mais bon. Je n'arrive pas à trouver de solution donc je viens sur ce forum pour demander de l'aide. Si quelqu'un à déjà eu le problème et peux m'aider ce serais sympa.
Merci bien :).

11 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Salut,

Ok, tu es sûr que les données sont bien écrites lorsque tu exécutes ta requête ?

Il n'y aurait pas une requête qui n'est pas flush par exemple ? Ou une transaction qui n'est pas commit ?

Tu utilises quel SGBD ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

Merci DARKSIDIOUS pour ton aide! En effet le fait de flusher la session après execution d'un requête select à l'air de bien marcher!
Merci encore :).
Bonne soirée!
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Salut,

Mets un point d'arrêt à l'endroit où tu exécute ta requête HQL et où tu récupère les données pour voir si toutes les données y sont où pas déjà pour voir si ca vient vraiment de la requête ou des autres couches de ton application.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

Non ça vient bien de la requête... J'ai bouclé sur ma liste après avoir récupérer le contenu de ma requête et le contenu est bien différent :s...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Salut,

Ok, alors montre nous ton code d'appel pour l'exécution de la requête.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

Voici...

public List<Sector> show()
{
Session session = HibernateUtil.currentSession();
Query query = session.createQuery("FROM Sector");
List<Sector> list = query.list();
return list;
}
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

Mysql... Et voila le code executé si je fais un un ajout avant affichage :

private void createSector(CreateSectorForm form) throws ParseException
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Sector sector = new Sector();
session.persist(sector);
sector.setName(form.getName());
tx.commit();
}
Et comment on flush une requête?
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

D'ailleurs je viens de voir une erreur... le persist avant le set c'est pas très cool XD! Mais bon j'ai corrigé ça et c'est toujours la même chose..
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Salut,

Je ne pense pas que le persist avant le set ait une grosse importance vu que les requêtes sont exécutés au commit de la transaction.

Essaye un flush manuel de ta session au cas où :
private void createSector(CreateSectorForm form) throws ParseException 
{ 
Session session = HibernateUtil.currentSession(); 
Transaction tx = session.beginTransaction(); 
Sector sector = new Sector(); 
sector.setName(form.getName()); 
session.persist(sector); 
session.flush();
tx.commit(); 
}


Sinon, mets un point d'arrêt juste avant ta requête de récupération de la liste et regarde dans la base de données si toutes les données que tu es sensé récupéré y sont bien...
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Salut,

Ok, c'était bien le flush alors ;)

Le fait de flusher la session force hibernate a exécuter les requêtes (à utiliser avec parcimonie, juste pour s'assurer que les données sont bien écrites).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
31 mars 2011

Ouaip c'est déjà fais encore merci ^^.