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

JPA Java Discussion :

OneToMany et Héritage


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut OneToMany et Héritage
    Bonjour,

    Voici ma config:
    Serveur d'application: JBoss 4.2
    DB : MySql 5.0.22

    Voici maintenant l'organisation de mes classes ( la DB correspondante est parfaitement générée ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class A implements Serializable
    {
    	...
    }
     
     
    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class B extends A
    {
    	...
    }
     
     
    @Entity
    @NamedQuery(name = "findMyObjects", query = "SELECT mo FROM MyObject mo")
    public class MyObject implements Serializable
    {
    	@OneToMany
    	protected Collection<A> collectionOfA;
     
    	...
     
    	Collection<A> getCollectionOfA()
    	{
    		return collectionOfA;
    	}
    }
    --> Dans l'EJB session, j'essaye de recupere la liste de mes objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // The query used to find MyObjects
    Query findMyObjects = entityManager.createNamedQuery( "findMyObjects" );
     
    // Get the list of MyObject
    Collection<MyObject> myObjects = findMyObjects.getResultList();

    Mon problème est que myObjects.getCollectionOfA() retourne toujours une liste vide. Pourtant il y a des entrées dans la base.

    Mon intuition c'est qu'il y a un problème dans la combinaison héritage + OneToMany relation, mais comment le résoudre ?

    Merci d'avance a ceux qui pourront m'aider.

    Cédric Templie

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Tout d'abord, votre post semble manquer d'infos: Qu'est ce que retourne ta requête nommé ? (c'est un select, ok, mais de quelle entité ?), où et comment est défini ta relation OneToMany ?

    Sinon, tu es bien sûr de vouloir avoir 2 entités dans une même hiérarchie ?
    Perso, je m'y prendrais autrement:
    Je déclares une classe C comme étant MappedSuperClass (pas une Entity) et je ferais hériter A et B de C.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Je vais essayer de clarifier.

    La requête nommée retourne une collection de MyObject, j'ai juste utilisé un alias dans la requête.

    J'ai du mal a définir la relation OneToMany différemment de comment je l'ai fait pour plusieurs raison, et ca répond aussi a pourquoi j'ai fait un heritage d'entité.

    En fait j'ai une class Document ( 3 champs: type, fileName, filePath ), et ensuite j'ai un héritage pour les différents types de documents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class CarteIdentite extends Document
    {
         // Données de ma carte d'identite
    }
     
    class Passeport extends Document
    {
         // Données de mon passeport
    }
     
    class DocumentLambda extend Document
    {
         // Données du document lambda
    }
    Maintenant il faut savoir que j'ai plein d'objets qui peuvent avoir des documents liés, et de n'importe quel type.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Person
    {
         // Une personne a une liste de documents associés ( n'importe quel type possible )
         Collection<Document> documents;
    }
    J'espere que j'ai reussi a clarifier le contexte dans lequel je suis.

    Encore merci

    Cédric Templie

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Ah oui, j'ai oublié de préciser que j'ai des documents dont je ne connais pas le type, c'est pour ca que je fais exister Document en tant qu'entite.

    Je vais quand meme essayer d'approfondir la solution avec MappedSuperClass, en utilisant une classe UnknownDocument.

    Je met à jour le post dès que j'ai tester la solution avec MappedSuperClass.

    Merci pour l'aide.

    Cédric Templie

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Aiie...

    Ca n'est pas possible d'avoir une relation OneToMany sur une classe qui n'est pas une entité.

    Me voila donc revenu au point de départ.

    Si quelqu'un a une idée je suis preneur

    Merci encore

    Cédric Templie

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par _Cedrix_ Voir le message
    Aiie...

    Ca n'est pas possible d'avoir une relation OneToMany sur une classe qui n'est pas une entité.
    par définition...

    mais OneToMany sur la classe racine (éventuellement abstract) d'une hiérarchie fonctionne très bien…

    si vous n'avez pas activé l'auto-détection des annotations, vous avez peut-être oublié une classe dans le persistence.xml (ou une typo…)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Héritage JPA et OneToMany
    Par ray_fab dans le forum JPA
    Réponses: 8
    Dernier message: 10/12/2011, 20h36
  2. Héritage et relation OneToMany
    Par wsp_ape dans le forum JPA
    Réponses: 0
    Dernier message: 18/05/2011, 19h29
  3. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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