IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Différence de résultats entre requêtes SQL et Criteria


Sujet :

Hibernate Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Différence de résultats entre requêtes SQL et Criteria
    Bonjour,

    Je voudrais savoir comment on peut vider le cache car j'ai l'impression que mon probléme vient de là.
    Quand je fais la requête via la fonction createSQLQuery j'ai 2 résultats (ce que je devrai avoir) et 1 par createCriteria !

    Quand je fais
    [...]
    session.createSQLQuery( "select * from COUNTRY" ).list().size();
    [...]
    ça me donne 2
    et quand je fais
    [...]
    Transaction transaction = session.beginTransaction();
    session.createCriteria( Country.class ).list().size();
    transaction.commit();
    session.close();
    [...]
    ça me donne 1 ! !

    Et mon fichier hibernate.cfg.xml est :
    [code]
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>

    <session-factory>

    <!-- connexion base de donnée -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="connection.url">jdbc:oracle:thin:@XXXXX:1521:YYYY</property>
    <property name="connection.username">CCCC</property>
    <property name="connection.password">DDDD</property>

    <!-- dialect SQL -->
    <property name="dialect">org.hibernate.dialect.OracleDialect</property>
    <property name="cache">org.hibernate.cache.NoCacheProvider</property>


    <!-- affichage des requete SQL -->
    <property name="show_sql">false</property>

    </session-factory>
    </hibernate-configuration>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Merci de m'indiquer une "parade"

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je ne vois pas comment ça pourrait venir du cache, puisqu'il n'est pas
    activé d'après ton fichier de mapping.

  3. #3
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, je n'ai jamais utilisé la méthode createSQLQuery, mais dans la documentation de référence, il y a cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List cats = sess.createSQLQuery("select * from cats")
        .addEntity(Cat.class)
        .list();
    L'erreur vient peut-être du fait que tu n'utilises pas addEntity

    Sinon, tu as essayé de balayer les listes retournées dans chaque cas pour voir ce qu'elles contiennent ?

  4. #4
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Pour vérifier si c'est un problème de cache ou non (puisque le cache 2nd niveau est désactivé mais tu auras toujours le cache de session qui sera présent), tu peux vider le cache :

    - en fermant ta session entre les deux requetes.
    - en faisant un session.clear() entre les deux requetes.

    Sinon je confirme ce qui a été dit, ca serait étonnant que le cache vient modifier le nombre d'ojbet retournés. Au pire tu auras des données non "à jour" avec la base, mais si tu n'effectues pas d'opération entre les deux requetes, le nombre d'objets en soi sera le même.

    Verifie aussi le contenu de tes listes car, comme l'a dit Nesmontou, les requetes SQL direct :
    1- ne sont pas forcément recommandée si tu veux récupérer des objets simplement
    2- ne renvoie pas de type mappés par défaut, il faut donc utiliser le addEntity(Country.class).

    Enfin si tu veux un dernier avis, il y a aussi les requetes HQL qui sauront surement répondre à ton besoin.

Discussions similaires

  1. Choix entre requête SQL ou mapping entre tables
    Par webfranc dans le forum Connectivité
    Réponses: 4
    Dernier message: 25/01/2011, 14h52
  2. [MySQL] Résultat de requête SQL différent entre PHP et phpMyAdmin
    Par djsid dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/12/2009, 11h22
  3. Différence de résultat entre MATLAB et Scilab
    Par ABN84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/05/2008, 22h53
  4. Différence avec résultats de requête analyse croisée
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/04/2008, 15h10
  5. Arranger la présentation du résultat à une requête SQL
    Par Roy Miro dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/09/2007, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo