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

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

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    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
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    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?
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    J'ai changé en plus le getter pour qu'il aille chercher getC().getA()
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

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