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 :

Mapping vers un objet


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut Mapping vers un objet
    Bonjour à tous,

    J'ai une entité A ayant une relation vers B et vers C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "a", orphanRemoval=true)
    private List<B>	bs;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "a", orphanRemoval=true)
    private List<C>	cs;
    C possède une relation vers A. C ayant une clé primaire composée de son id et de l'id de A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Id
    private long cid;
     
    @Id
    @ManyToOne
    private A a;
    B possède une relation vers C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @ManyToOne
    private C	c;
    J'aimerais que B ait une relation vers A au travers de C. Est-ce que cela est possible? J'aimerais éviter de créer une relation @ManyToOne vers A puisque cette relation existe déjà dans C et j'aurais deux fois la même donnée (id de A) dans ma table B.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu ne peux pas le faire au niveau du mapping (en tout cas pas sans tordre tout le bazard et avoir plein de edge cases à gérer), mais tu peux très bien le faire au niveau du code. Tu mappe la relation A=C et C=B de manière classique.
    Ensuite, dans A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class A {
        //.....
        @Transient
        public List<B> getBs(){
            return getCs().stream().map(C::getB).collect(Collectors.toList());   
        }
    }
    et dans B si tu veux du bidirectionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class B {
        //.....
        @Transient
        public A getA(){
            return getC().getA();   
        }
    }
    Reste à gérer les null aussi si c'est une situation possible

  3. #3
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    Merci pour ta réponse tchize_!
    Là, j'ai testé de faire ça dans B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ManyToOne
    @JoinColumn(name="c_a_ctid", insertable=false, updatable=false)
    private A	a;
    Et ça a l'air de marcher. Il y a quelque chose que j'ai loupé qui fait tomber cette solution à l'eau?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avec ce mapping, ca veux dire que dans ta database tu as une relation table B -> table A, ce qui est contraire à ce que tu as dit précédement qui consistait à passer par la table C pour éviter d'avoir cette relation dans la table B

    "

  5. #5
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    J'ai changé en plus le getter pour qu'il aille chercher getC().getA()

Discussions similaires

  1. [Mapping] Mapping d'une table de lien vers plusieurs objets
    Par fhibernate dans le forum Hibernate
    Réponses: 12
    Dernier message: 25/09/2012, 14h47
  2. Mapping d'un objet XML vers un autre avec Xquery
    Par amine_en_france dans le forum Oracle
    Réponses: 0
    Dernier message: 03/08/2009, 14h48
  3. Mapping vers une page static
    Par Thomas_ats dans le forum Struts 1
    Réponses: 1
    Dernier message: 16/02/2007, 11h43
  4. Pb Mapping Liste d'objets
    Par YokoSop dans le forum Hibernate
    Réponses: 4
    Dernier message: 27/07/2006, 13h39
  5. [j3d] afficher une ligne qui point vers un objet
    Par guitalca dans le forum 3D
    Réponses: 1
    Dernier message: 06/03/2006, 21h44

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