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 :

Problème jointure et extend Java


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Problème jointure et extend Java
    bonjour

    j'ai une application qui gère 2 métiers différents,chacun des métiers possèdent des produits avec les mêmes informations et le 2eme métiers possèdes des informations en plus. Du coup en java nous avons simplement fait un

    class Produit{
    }

    class Produit2 extend Produit{
    }

    le problème c'est que lorsque j'effectue une requête sur produit, hibernate me rajoute systématiquement une jointure sur Produit2, et cette jointure me coute extrêmement cher car cette jointure peut me retourner des milliers d'enregistrement dont je n'ai pas besoin et en java le fait de ne pas mettre la jointure et qu hibernate me la rajoute et bien je ne peux pas rajouter de contrainte pour filtrer les resultats.
    Et même si je rajoute la jointure en ajoutant des filtres pour dégager les résultats de cette jointure, postgresql va quand même prendre du temps car il va devoir traiter un volume important de donnée pour enfin ne pas les prendre en compte.

    Du coup je voulais savoir s il existait un moyen de dire à hibernate, lorsque l'ont construit la requête avec createQuery(...);, d'ajouter un paramètre ou quelque chose qui me permettrait d'exclure une jointure en particulier ou ne pas ajouter les jointures sur les extends? car si je prends la requête SQL généré et que j'enlève la jointure sur produit2 ma requête passe des plusieurs secondes à quelque milliseconde.

    merci de votre aide, j'espère avoir été clair.

  2. #2
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    Je pense que ce problème est induit par ce qu'Hibernate appelle le "polymorphisme implicite". Pour illustrer ce principe, on peut considérer la requête HQL suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from java.lang.Object obj
    qui retourne tous les objets persistants déclarés dans le mapping et présents en base.


    Tu peux faire en sorte qu'Hibernate ne charge pas ta hiérarchie objet en utilisant le polymorphisme explicite (possible aussi bien en XML qu'avec les annotations). Dans ce cas Hibernate se contente de requêter la table correspondant à la classe mais pas plus.
    Voici un exemple (qui date un peu mais qui ressemble pas mal à ton cas) :
    http://community.jboss.org/wiki/LightweightClass

  3. #3
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Si j'ai bien compris, lorsque tu travailles sur Produit, tu voudrais ne pas travailler aussi sur Produit2.

    Dans ce cas, pourquoi ne pas adopter cette hiérarchie :
    abstract class Produit { ...}
    class Produit1 extends Produit { ... }
    class Produit2 extends Produit { ... }

    Quitte à ce que Produit1 soit vide...
    Dans ce cas une requête sur Produit1 ne travaillera que sur les instances persistantes de Produit1 et plus sur l'ensemble Produit1 U Produit2.

    Pour les détails de mapping d'héritage : http://objetdirect.developpez.com/ar...gies-heritage/

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    merci pour vos reponse, cela ma mis sur la piste.

    j'ai ajouté le polymorphisme explicit dans les annotations mais cela n'a pas suffit, j'ai du ajouter :

    @MappedSuperclass sur ma classe mere.

    est ce que cela est normal?

  5. #5
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    Je suis plutôt familier du mapping XML mais je pense que c'est normal car il faut que tu précises à Hibernate que tu hérites des propriétés de la classe mère sans pour autant utiliser une stratégie d'héritage définie via InheritanceType. C'est certainement la raison du @MappedSuperclass

Discussions similaires

  1. problème d'execution programme java
    Par mel_gasy dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 08/10/2006, 01h29
  2. Réponses: 6
    Dernier message: 04/07/2006, 11h56
  3. Problème jointure
    Par RiPSO dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/04/2006, 23h55
  4. Problème jointure de tables
    Par Carter dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/02/2006, 12h41
  5. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58

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