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 :

Requête sur classe mère


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut Requête sur classe mère
    Bonjour,

    J'ai une classe B ma classe fille, qui hérite de ma classe A. Ces deux classes correspondent à deux tables en base et font l'objet de deux fichiers de mapping. Mais comme leurs propriétés sont similaires, j'ai fait une classe Java mère et une classe fille. Le problème c'est que quand je fais une requête sur ma classe A , Hibernate applique par défaut la même requête à la classe fille !

    Comment éviter cela ? comment dire à Hibernate de n'appliquer la requête qu'à ma classe mère ?

    Ce qui est le plus étonnant encore, c'est que lorsque je fais une requête sur ma classe B elle n'est pas appliquée à ma classe A !

  2. #2
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Salut,

    Pour ta requete ca semble logique... si tu as une relation d'heritage, Hibernate va récupérer les objets de la même manière qu'en Java. Autrement dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Chaton hérite de Chat. Chats dans la cage de gauche, chatons à droite.
    
    Je veux récupérer tous les chats :
    Les chatons sont des chats, je prend donc les chats des deux cages.
    
    Je veux récupérer les chatons :
    Les chats de gauche ne sont pas des chatons (sinon ils seraient à droite) 
    donc je ne peux les prendre. Je ne récupère donc que ceux de droite.
    Cet exemple illustre parfaitement les "casts" en Java ... et explique donc bien le comportement d'Hibernate ici.

    Par contre, il doit surement être possible de ne récuperer que les chats qui ne sont pas des chatons ... il faudrait étudier la question... (peut etre avec une intersection ou une exclusion quelconque.

    Bon courage

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    J'ai besoin d'un conseil sur la méthode que j'ai employé.

    Tu te rappelles Bizur mon poste "2 tables 2 mapping 1 classe java" ? finalement ce que j'ai fait :
    - deux fichiers de mapping pour chacune des tables
    - deux classes java : une classe mère et une qui en hérite pour éviter de réécrire toutes propriétés et les accesseurs.

    Penses tu que ma solution est bonne ? Est ce que j'aurais du faire un héritage dans mon mapping ? comme ici

    Je pense que si Hibernate me fait deux requêtes au lieu d'une seule (juste sur ma classe mère comme j'aurais voulu !) c'est peut être que j'ai mail concu ma solution à la base ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Hum ... je me souvisn bien de ton post mais j'ai ainsi une question :
    Y-a-t-il un lien "métier" entre tes deux objets JAVA ou as tu créer cet héritage uniquement "par flemme" de ne pas recopier les propriétés et méthodes ?!?

    Si c'est le premier cas, je ne vois pas pourquoi tu ne veux pas récuperer les deux requetes en posant des questions sur la classe mère. Si c'est le second cas, je te proposerai alors de recommencer la seconde classe ... et si tu ne t'en sens pas le "courage", passe plutot par une classe mère abstraite et deux classes filles ... et tu ne mappes que les classes filles. Ainsi, toute requete sur une classe fille n'impliquera pas l'autre classe et si tu fais les deux, et bien mappes la classe mère abstraite également

    PS: Désolé pour le temps de réponse, j'étais en réunion hier

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Salut,

    Oui il ya un vrai lien métier et finalement ça m'arrange en quelque sorte mais desfois c'est embettant car je fais des requêtes justement sur le critère qui fait que jai différencier les deux tables et ca ne le prend pas en compte !

    Merci pour ton aide, et c'est pas grave pour le temps de réponse moi aussi je bosse sur plusieurs choses en même temps donc desfois je laisse un peu de côté certain problème

    Au fait j'ai tester la solution de faire une classe mère abstraite et deux classes fillles concrètes, où je mappe mes tables avec mes classes filles, mais après plusieurs essais j'ai remarqué qu'Hibernate ne voulait pas mappé que les classes filles, il lui faut forcément mapper la classe ou sont écrites toutes les propriétés (la classe mère) ! Bizarre non ?

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    As tu déjà essayé de faire une classe mère abstraite et X classes filles concrètes et de ne mapper que les classes filles ? Parce que pour moi ca ne marche pas mais je m'y suis peut être mal prise !

  7. #7
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut
    Bonjour,

    j'ai exactement le même problème que toi Galac Extra :

    Citation Envoyé par Machiavel
    je travaille actuellement sur un projet J2EE (Struts, Hibernate etc..) et j'ai un petit souci. J'ai une classe B qui hérite d'une classe A(non abstraite) et quand j'effectue des requêtes HQL sur la classe A, Hibernate me remonte aussi les objets de la classe B.
    Après quelques recherches dans la doc d'hibernate j'ai trouvé le mot clé "Fetch" qui - avec une valeur "Select" - devrait résoudre mon problème.
    Le souci c'est que l'ingénieur conception (en vacances) a fait un mapping "Une table par classe fille" (<joined-subclass>) qui ne permet pas l'utilisation du mot clé "Fetch". Or je suis pas très chaud pour changer radicalement le mapping. Pourriez-vous m'évoquer les différentes alternatives pour faire un héritage qui ne remontent pas les objets des classes filles s'il vous plaît? je me débrouillerai après pour faire au mieux.
    As-tu trouvé une solution depuis?

  8. #8
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Par défaut
    J'ai trouvé une rustine en attendant mais je suis toujours preneur pour une solution dans le mapping : il faut dans la requête HQL tester la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select p from Produit p where p.class = Produit
    Le résultat de select ne renvoie que les objets qui sont strictement de la classe produit (et donc pas les objets des classes héritées de la classe "Produit").

Discussions similaires

  1. Association et composition sur la classe mère ou ses classes filles ?
    Par WoodDev dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 30/01/2013, 10h31
  2. Comparable sur les classes mères et filles
    Par DevServlet dans le forum Général Java
    Réponses: 8
    Dernier message: 21/03/2012, 15h32
  3. Héritage et ManyToOne sur classe mère
    Par ProximIT dans le forum JPA
    Réponses: 1
    Dernier message: 29/05/2009, 11h23
  4. undefined symbol sur classe mère avec dlopen
    Par Yann__ dans le forum C++
    Réponses: 18
    Dernier message: 24/04/2008, 16h03
  5. [héritage] requête sur classe fille
    Par Galak extra dans le forum Hibernate
    Réponses: 3
    Dernier message: 25/08/2006, 10h30

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