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

JDBC Java Discussion :

classe DAO et clé étrangère


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut classe DAO et clé étrangère
    Bonjour chers tous,
    j'ai un soucis avec la gestion des clés dans la conception de classe DAO et j'ai besoin de votre aide pour m'éclairer.
    Voici un bout de code pour illustrer ma pensé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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    public Auteur{
       private int id;
       private String nom;
       private String prenoms;
       private List<Livre> livres = new ArrayList<>();
     
       //constructeur, getters et setters
    }
     
    public Livre{
       private int id;
       private String titre;
     
       //constructeur, getters et setters
    }
     
    les tables de la base de données
     
    CREATE TABLE auteur{
        id int,
        nom varchar,
        prenoms varchar,
        primary key (id),
    }
    CREATE TABLE livre{ 
        id int,
        auteur_id int,
        titre varchar,
        primary key (id),
        foreign key(auteur_id) references salary (id)
                ON DELETE CASCADE
                ON UPDATE CASCADE
    }
     
    les DAO
    public AuteurDao{
        public Auteur ajouterAuteur(Auteur auteur){
           //On fait une insertion d'un auteur et ses livres et on recupère son id
        }
     
        public Auteur delAuteur(int id){
          //Supprimer un auteur de la BD
        }
     
        public Auteur UpdateAuteur(Auteur auteur){
          //Mettre à jour les données d'un auteur dans la BD
        }
     
        public Auteur findAuteur(Auteur auteur){
          //Renvoyer les informations d'un auteur
        }
     
        public List<Auteur> getList(){
         //Renvoyer la liste de tous les auteurs
        }
    }
     
    public LivreDao{
        public Auteur ajouterLivre(Livre livre){
           //On fait une insertion d'un livre et on recupère son id
        }
     
        public Auteur delLivre(int id){
          //Supprimer un livre de la BD
        }
     
        public Auteur UpdateLivre(Livre livre){
          //Mettre à jour les données d'un livre dans la BD
        }
     
        public Auteur findLivre(Livre livre){
          //Renvoyer les informations d'un livre
        }
     
        public List<Livre> getList(){
         //Renvoyer la liste de tous les livres
        }
    }
    Je voudrais comment rattacher un livre à un auteur lors de l'ajout d'un nouveau livre?
    Y a-t-il une façon de faire sans modifier la méthode ajouterLivre(Livre livre) de la classe LivreDao comme ceci ajouterLivre(Livre livre, int auteurid)?
    Merci par avance.

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 329
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Pour répondre à votre question, non. Au vu de votre modèle de classe, Livre n'a pas l'information de l'Auteur. Mais vous pouvez la rajouter. Vous pouvez soit ajouter l'id de Auteur dans la classe Livre, soit ajouter une reférence de l'un vers l'autre. Au niveau objet, les références sont plus agréables à utiliser qu'un nombre qui ne représente pas grand choses. Mais étant donné que Auteur à déjà une collection de Livreil y à un risque de boucle infinie dans l'implémentation de votre DAO (findAuteur -> findLivresByAuteur -> findAuteur, ..).
    De plus il vos faut accéder au code d'un DAO pour répondre depuis un autre, ce qui montre souvent un "code smell".

    Une solution serait de décider d'une relation d'aggrégation au lieu d'une composition. Auteur pourrait-être le seul point d'entrée pour accéder aux livres. Mais je suppose qu'il y à des cas d'utilisations ou cette solution n'est pas idéale, notamment si vous voulez llister tous les livres indépendamment de l'auteur. Dans la pratique, à moins d'utiliser un ORM qui gère ces cas pour vous, on utilise souvent une clef d'un côté ou de l'autre. Ainsi Livre pourrait contenir une clef qui permet de retrouver l'auteur, un peu comme un lien qu'il "suffit" de déréférencer pour obtenir ce qu'il y à derrière.

Discussions similaires

  1. [Framework] Probléme d'instanciation des classe dao et des classe service
    Par daly2009 dans le forum Spring
    Réponses: 1
    Dernier message: 03/11/2010, 14h19
  2. [JUnit] comment écrire des test dans une classe DAO
    Par nouramin dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 23/04/2010, 11h05
  3. récupérer une session à partir d'une classe DAO
    Par cotede2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/10/2008, 10h19
  4. classe DAO singleton?
    Par cotede2 dans le forum Hibernate
    Réponses: 3
    Dernier message: 07/10/2008, 10h41
  5. [HIBERNATE] CLasses DAO générées avec code bizarre
    Par PamelaGeek dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2006, 10h25

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