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 :

utilisation de Restrictions.sqlRestriction


Sujet :

Hibernate Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut utilisation de Restrictions.sqlRestriction
    Bonjour tout le monde,
    je suis débutant sur hibernate
    j'ai une requête sql un peu compliquée en fin pas tellement mais il y a seulement des jointures que j'arrive pas à les écrire avec criteria de Hibernate
    donc j'ai opté pour Restrictions.sqlRestriction pour pouvoir ecrire directement mes jointure sous form de sql.

    donc ma requête ressemble globalement à ca :

    StringBuffer sql=new StringBuffer();
    Criteria criteria = getSession().createCriteria(Effectif.class);
    sql=sql.append("effectif.fk_cdr_id= rattachement_siret_cdr.fk_cdr_id")
    .append(" and effectif.fk_siret_id= rattachement_siret_cdr.fk_siret_id")
    .append(" and rattachement_siret_cdr.fk_etablissement_dp_id= etablissement_dp.id")
    .append(" and etablissement_dp.fk_etablissement_secondaire_id=etablissement_secondaire.id")
    .append(" and etablissement_secondaire.id=")
    .append(idEtabSec);

    criteria.add(Restrictions.sqlRestriction(sql.toString()));


    à l'exécution j'ai une erreur :
    RA-00904: "ETABLISSEMENT_SECONDAIRE"."ID": invalid identifier

    Merci d'avance pour votre aide j'en ai vraiment besoin
    cordialement

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 1
    Points
    1

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Tout d'abord, je trouve ta façon de mélanger les criteria avec des StringBuffer un peu rudimentaire, les jointures se faisant assez "facilement" directement avec Criteria.

    A la limite si tu veux faire comme tu fais actuellement, utilises directement du HQL.

    Cependant, voici la méthode createCriteria() permet de faire une jointure convenablement.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    crit.createCriteria("Table1","table1").setFetchMode("Table1", FetchMode.SELECT);
    Ici, je fais une jointure sur la Table1 "lazy" (FetchMode.SELECT, pour une jointure EAGER tu peux faire FetchMode.JOIN, attention, FetchMode.LAZY et FetchMode.EAGER sont dépréciés.).

    Tu peux également faire une jointure avec la même syntaxe mais en utilisant createAlias.

    Ces méthodes font "souvent" la même chose, cependant avec les DetachedCriteria, tu pourras faire des choses avec l'une mais pas avec l'autre.

    Si tu veux plus de précisions fais moi signe !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 92
    Points : 45
    Points
    45
    Par défaut
    Je me joins à cette discussion car je débute aussi dans les criterias et je cherche à obtenir une requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.*
    FROM A a
    LEFT JOIN B b ON a.b_id = b.id
    Alors je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Criteria c = session.createCritera(A.class)
    .addAlias("b","table_b")
    .add(Restrictions.eq("table_b.nom", "toto"))
    Mais le soucis, c'est qu'il me fait un SELECT * au lieu d'un SELECT a.*
    J'ai essayé avec plusieurs FetchMode mais rien n'y change quoi que ce soit.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    A partir du moment où tu vas faire une jointure avec les Criteria et si tu ne spécifies pas de projection, il va rapatrier toutes les propriétés des objets joints.

    Jouer avec le FetchMode ici ne servira pas à grand chose, étant donné qu'il va juste servir à récupérer ou non les dépendances pouvant exister entre les objets joints.

    Dans ton cas et à mon avis, faire un a.* consistera à faire une projection sur tous les attributs de a avec un Projections.projectionList.

    Ta requête n'étant pas très dynamique et légère, tu pourrais la faire très facilement en HQL.

    Le problème avait été un peu abordé sur ce post :

    http://www.developpez.net/forums/d45...s-projections/

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2011, 12h33
  2. Utilisation du cache et restriction
    Par Jinroh77 dans le forum SSAS
    Réponses: 2
    Dernier message: 06/10/2009, 13h53
  3. Criteria + Restrictions.sqlRestriction
    Par saveThyCheerleader dans le forum Hibernate
    Réponses: 0
    Dernier message: 15/04/2009, 19h22
  4. Utilisation de champ Memo. Restrictions ?
    Par yuan dans le forum Access
    Réponses: 5
    Dernier message: 10/02/2007, 13h44
  5. restriction d'utilisation
    Par k_boy dans le forum Windows XP
    Réponses: 7
    Dernier message: 18/02/2006, 18h11

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