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 avec heritage


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut Mapping avec heritage
    Bon j'ai quelque question a propos du mapping lorsqu'on a l’héritage.

    bon voila une photo qui montre un petit exemple.
    Nom : 893652402.jpg
Affichages : 108
Taille : 33,5 Ko

    et voila mes classes et leur mapping:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
    public class Produit implements Serializable{
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(nullable = false)
        @NotNull
        private String title;
        @Column(nullable = false)
        @NotNull
        private Integer price;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    public class Livre extends Produit  implements Serializable{
        @Column(nullable = false)
        @NotNull
        private String isbn;
        @Column(nullable = false)
        @NotNull
        private String language;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    public class lignedecommande implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @Column(nullable = false)
        private Integer quantity;
        @OneToOne
        @JoinColumn(name = "produit_fk", nullable = false)
        private Produit produit
    }
    j'ai mis que les 3 classes car mes questions les concernent .

    supposons que je crée un produit avec id=1,
    et je crée un livre avec id =1.
    et je crée un CD avec id =1.

    lorsque je crée un ligne de commande avec fk=1 alors c'est le produit avec id=1 qui sera référencé dans la table lignedecommande.
    comment je peux référencé un Livre ou un CD dans la table lignedecommande surtout que la table livre et CD n'ont pas de relation directe avec ligndecommande.
    je sais pas comment faire surtout plu-tard je devrais faire des requêtes .
    Merci.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    supposons que je crée un produit avec id=1,
    et je crée un livre avec id =1.
    et je crée un CD avec id =1.

    Impossible :
    cela exprime que le produit id=1 est aussi bien un livre qu'un CD.
    (construction non supportée en Java)

    Si vous avez 2 produits, un CD et un livre vous aurez différents enregistrement en DB et cela dépend de la stratégie d'inheritance
    Vous avez choisi TABLE_PER_CLASS :
    dans ce cas, il serait mieux de faire de Produit une MappedSupperClass et qu'il soit abstract
    et vous aurez un final 2 records : un CD et un Livre, il n'y aura plus de table PRODUITS, les champs de Produit seront dans chacune des tables des sous-produits (ici 2)
    (l'ORM fera un query avec des UNION pour retrouver tous les produits)
    si vous restez avec Produit en tant que @Entity, vous aurez 4 records
    produit id = 1 et CD id = 1
    produit id = 2 et livre id = 2

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut
    premièrement je te remercie pour ta réponses.

    concernant avoir un produit et un Livre avec le même nom je crois j’avais essayé l'insertion directe avec derby database et pas depuis un programme java.

    je crois que je vais changer l'architecture de l’héritage je vais avoir une seul tables qui contiens tout les attributs pour ne pas me casser la tête avec les jointures.

  4. #4
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Il existe une autre possibilité: gérer ça par des clés étrangères. C'est à dire:
    - une table Produit, avec tous les attribut d'un produit: prix d'achat, prix de vente, fournisseur, etc. et en plus avec un id et deux clés étrangères nullables, FKlivre et FKCD.
    - une table CD avec id, auteur, titre, durée, que sais je.
    - une table Livre avec id et/ou ISBN, auteur, titre, nombre pages...

    Dans ce cas-là, c'est bien possible d'avoir id=1 dans chaque table (bien que pour Livre ça reste facultatif, car ISBN est déjà un identifiant unique).
    FKCD d'un Produit va mapper vers l'id du CD et dans ce cas, FKlivre du même Produit sera null.
    FKlivre d'un autre Produit pointera vers l'id (ou ISBN) d'un Livre et sa clé étrangère FKCD sera null.

    Si FKlivre d'un Produit n'est pas null -> Produit est un Livre.
    Sinon -> Produit est un CD.

    Bien sûr, tout dépend du but de l'application.

Discussions similaires

  1. Mapping avec OJB
    Par kodo dans le forum JDBC
    Réponses: 2
    Dernier message: 12/06/2006, 13h09
  2. [hibernate] Mapping avec identifiant composé
    Par miky_jo dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/10/2005, 17h48
  3. [KODO]mapping avec JDO
    Par ksavieras dans le forum Persistance des données
    Réponses: 3
    Dernier message: 21/09/2005, 21h41
  4. Conception avec héritage
    Par Mr N. dans le forum Diagrammes de Classes
    Réponses: 31
    Dernier message: 04/07/2005, 19h59
  5. [Struts][Tiles] Probleme d'action mapping avec un dynaform
    Par bluefox_du_974 dans le forum Struts 1
    Réponses: 3
    Dernier message: 28/03/2005, 23h47

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