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

ASP.NET Discussion :

(Hibernate) Problème ICriteria sur plusieures tables


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut (Hibernate) Problème ICriteria sur plusieures tables
    Bonjour,

    J'ai un souci pour lier 3 tables ensemble correctement.
    Voici mes tables :
    BATIMENT (IdBatiment,LibelleBatiment, IdCommune, IdDepartement, LibelleRue) clé IdBatiment
    RUE (IdCommune, IdDepartement, LibelleRue) clé sur 3 champs IdCommune, IdDepartement, LibelleRue
    COMMUNE (IdCommune, IdDepartement, LibelleCommune) clé sur 2 champs IdCommune, IdDepartement


    Donc, dans la table BATIMENT j'ai l'identifiant de la RUE
    Dans la RUE j'ai l'identifiant de COMMUNE

    J'arrive a les mapper assez correctement , pusque j'arrive à afficher dans une grille une liste de tous les batiments (LibelleBatiment, LibelleRue, LibelleCommune)

    Le problème vient quand je veux trier sur le Libelle de Commune.
    Le tri sur le libellé Rue marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        ISession session = NHibernateHelper.GetCurrentSession();
        ICriteria criteres = session.CreateCriteria(typeof(Batiment));
       ICriteria critRue = criteres.CreateCriteria("Rue");
                   if (ordreTri == "ASC")
                        critRue.AddOrder(Order.Asc("LibelleRue"));
                    else
                        critRue.AddOrder(Order.Desc("LibelleRue"));

    j'aimerai faire pareil avec le libellé de Commune (donc un cran plus loin)
    je pensais à qch de ce genre, mais ca fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        ISession session = NHibernateHelper.GetCurrentSession();
        ICriteria criteres = session.CreateCriteria(typeof(Batiment));
       ICriteria critCommune = criteres.CreateCriteria("Rue").CreateCriteria("Commune");
                   if (ordreTri == "ASC")
                        critCommune .AddOrder(Order.Asc("LibelleCommune"));
                    else
                        critCommune .AddOrder(Order.Desc("LibelleCommune"));

    Merci d'avance si qqn a une idée

  2. #2
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    J'ajoute aussi les mappings :

    Batiment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      <class name="Batiment" table="BATIMENT" >
        <id name="IdBatiment" column="IdBatiment">
          <generator class="assigned" />
        </id>
       <property name="LibelleBatiment"       column="LBLBATIMENT"/>
       <many-to-one name="Rue" class="Rue" not-found="ignore">
          <column name="IDDEPARTEMENT" />
          <column name="IDCOMMUNE" />
          <column name="LIBELLERUE" />
        </many-to-one>
     </class>

    Rue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      <class name="Rue" table="RUE">
        <composite-id>
          <key-many-to-one name="Commune" class="Commune" >
            <column name="IDDEPARTEMENT" />
            <column name="IDCOMMUNE" />
          </key-many-to-one>
          <key-property name="LibelleRue"   column="LIBELLERUE" />
        </composite-id>
     
        <property       name="LibelleComplet"      column="LIBELLECOMPLET"/>
     
      </class>

    Commune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     <class name="Commune" table="COMMUNE">
        <composite-id>
          <key-property name="Departement" column="IDDEPARTEMENT" />
          <key-property name="IdCommune" column="IDCOMMUNE" />
        </composite-id>
     
        <property name="LibelleCommune"   column="LBLCOMMU"/>
     
      </class>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Points : 95
    Points
    95
    Par défaut
    D'un point de vue purement syntaxe ne serait ce pas LibCommune et non LibelleCommune

  4. #4
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    snopims , c'est ma faute, j'ai voulu que ce soit plus comprehensible, et modifié les libelles.
    je vais corriger ca.

    L'erreur n'est pas là malheureusement

  5. #5
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    Bon, comme je ne trouve pas pour l'instant de reponse, j'ai mis en place une solution provisoire avec CreateSQLQuery
    J'ai utilisé une requete SQL normale

  6. #6
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    Je pense qu'il te faut ajouter un alias à Commune genre "C" et l'utiliser pour définir ton champ, genre "C.LibCommune". Il me semble que la méthode CreateCriteria peut prendre deux attributs, le second étant l'Alias

Discussions similaires

  1. Problème update sur plusieurs tables
    Par Fabdeuche dans le forum SQL
    Réponses: 4
    Dernier message: 22/04/2010, 16h16
  2. [JTable] problème filtrage sur plusieurs table
    Par MustOne dans le forum Composants
    Réponses: 3
    Dernier message: 10/06/2009, 10h00
  3. Problème requete sur plusieurs tables
    Par sigmoun dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/01/2009, 00h32
  4. problème delete sur plusieurs tables
    Par soubre dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/06/2008, 17h16
  5. hibernate-criteria : jointure sur plusieurs tables
    Par loic72 dans le forum Hibernate
    Réponses: 9
    Dernier message: 24/09/2007, 17h27

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