Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    novembre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Nhibernate, Left join, with clause

    Bonjour tout le monde,

    je suis actuellement sur un problème de requête sous Nhibernate
    (ma version de dll date de début aout... plutot récent)

    La requête de base est lente, et travaillant la requête sous commande SQL, j'arrive à l'optimiser
    problème, je n'arrive pas à transposer cette optimisation en C# avec nhibernate

    comment ça se passe :

    Exemple de mon modèle

    TABLE_A { A_Identifiant, A_Libelle, A_Relation_B_ident}
    TABLE_B { B_Identifiant, B_Libelle}

    Actuellement, lorsque les requêtes sont créées, elles sont mises en place de la manière suivante

    Code :
    1
    2
    Select A_Libelle, B_Libelle from TABLE_A
        left join TABLE_B;
    nhibernate passe par là en interprétant les xml du modele, en considérant le champ A_Relation_B_ident comme une entité et non comme un champ et on obtient :

    Code :
    1
    2
    Select A_Libelle, B_Libelle from TABLE_A
        left outer join TABLE_B on TABLE_A.A_Relation_B_ident = TABLE_B.B_Identifiant;
    problème, c'est qu'avec ce genre de truc, on a des full access sur les tables

    une des optimisations, consistes à ajouter un truc tout simple
    Code :
    1
    2
    3
    4
    Select A_Libelle, B_Libelle from TABLE_A
        left outer join TABLE_B
        on TABLE_A.A_Relation_B_ident = TABLE_B.B_Identifiant
        AND TABLE_A.A_Relation_B_ident is not null;
    ça évite le full access de suite sur table_B.
    Problème, en hibernate, il n'aime pas du tout, vu que pour lui, le champ A_Relation_B_ident est une entité, et non un String ou autre...

    Au moment de l'execution du code, j'ai le message suivant :

    Erreur dans la récupération des demandes pour la Recherche: with-clause expressions did not reference from-clause element to which the with-clause was associated

    D'avance, je vous dis un grand merci !( déjà pour lire ce post...)

  2. #2
    Expert Confirmé Avatar de iberserk
    Homme Profil pro Bruno IGNACE
    Architecte de base de données
    Inscrit en
    novembre 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Nom : Homme Bruno IGNACE
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2004
    Messages : 1 600
    Points : 2 625
    Points
    2 625

    Par défaut

    Select A_Libelle, B_Libelle from TABLE_A
    left outer join TABLE_B
    on TABLE_A.A_Relation_B_ident = TABLE_B.B_Identifiant
    AND TABLE_A.A_Relation_B_ident is not null;
    Cela revient à faire un INNER JOIN?
    Le problème ne vient'il pas simplement du fait que A_Relation_B_ident est inutilement NULLABLE dans votre table?

    je rappel que les VIEW SQL sont là pour masquer la complexité d'un modèle...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •