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 :

Renommer ses clés étrangères pour JPA


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut Renommer ses clés étrangères pour JPA
    Bonjour,

    J'utilise Netbeans 6.5 qui a la gentillesse de créer un ensemble de classes que je nomme par exemple PlayerDAO, RateDAO à partir de mes tables InnoDB de Mysql. Ces tables ont donc des Foreign Keys.

    En gros, l'auto-génération donne ceci :

    J'ai 3 tables Mysql :
    • player : idPlayer (PK), email
    • site : idSite (PK), website
    • rate_player_site : idRate (PK), idPlayer (FK), idSite (FK), rate
    Je génère 3 classes directement par Netbeans que je nomme PlayerDAO, SiteDAO, RateDAO. Première question : est-ce judicieux de les appeler ainsi, ou je suis un noob qui a mismatch dans sa mind ?


    Netbeans me génère un code plein d'annotations auxquelles j'aimerais ne pas trop toucher. Le problème se situe dans le nom données aux associations :

    Dans RateDAO :
    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
    @Entity
    @Table(name = "rate_site_player")
    @NamedQueries({@NamedQuery(name = "RateDAO.findAll", query = "SELECT r FROM RateDAO r"), @NamedQuery(name = "RateDAO.findByIdRate", query = "SELECT r FROM RateDAO r WHERE r.idRate = :idRate"), @NamedQuery(name = "RateDAO.findByRate", query = "SELECT r FROM RateDAO r WHERE r.rate = :rate")})
    public class RateDAO implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "idRate")
        private Integer idRate;
        @Basic(optional = false)
        @Column(name = "rate")
        private float rate;
    
        @JoinColumn(name = "idPlayer", referencedColumnName = "idPlayer")
        @ManyToOne(optional = false)
        private PlayerDAO idPlayer;
        @JoinColumn(name = "idSite", referencedColumnName = "idSite")
        @ManyToOne(optional = false)
        private SiteDAO idSite;
    
        public RateDAO() {
        }
        
        ...
        public PlayerDAO getIdPlayer() {
            return idPlayer;
        }
    
        public void setIdPlayer(PlayerDAO idPlayer) {
            this.idPlayer = idPlayer;
        }
    
    }
    Le problème vient aux noms choisits : idPlayer et idSite au lieu de player et site.
    Plus tard, je dois écrire des requètes JPA :
    "Select r from RateDAO r where r.idPlayer.idPlayer=1"
    alors que
    "Select r from RateDAO r where r.player.idPlayer=1" serait pus sexy.

    Est-ce donc la "good practice" de renommer idPlayer en player tout court ?
    Si je renomme mes FK, à chaque fois que je modifierais la Base de données, soit je ne compte plus sur Netbeans pour regénérer, soit je renomme toute ces manips sur les clés étrangères.

    Là, ca va, c'est un code de test, mais mon vrai projet est blindé de FK ! A votre avis, quelle est donc le meilleur compromis ?

  2. #2
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    bonsoir,
    Citation Envoyé par nicorama Voir le message
    Première question : est-ce judicieux de les appeler ainsi, ou je suis un noob qui a mismatch dans sa mind ?
    Pourquoi ajouter DAO ? DAO c'est pour les opérations CRUD, or ici c'est des classes métiers.

    Citation Envoyé par nicorama Voir le message
    Le problème vient aux noms choisits : idPlayer et idSite au lieu de player et site.
    Plus tard, je dois écrire des requètes JPA :
    "Select r from RateDAO r where r.idPlayer.idPlayer=1"
    alors que
    "Select r from RateDAO r where r.player.idPlayer=1" serait pus sexy.

    Est-ce donc la "good practice" de renommer idPlayer en player tout court ?
    oui, je crois qu'il n' y aurait pas d'incidence sur le fonctionnement de l'application.

    Citation Envoyé par nicorama Voir le message
    Si je renomme mes FK, à chaque fois que je modifierais la Base de données, soit je ne compte plus sur Netbeans pour regénérer, soit je renomme toute ces manips sur les clés étrangères.
    Renommer les FK impliquera des changements au niveau du code Java (si je ne me trompe pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @JoinColumn(name = "idPlayer", referencedColumnName = "idPlayer")

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Citation Envoyé par bassim Voir le message
    bonsoir,
    Pourquoi ajouter DAO ? DAO c'est pour les opérations CRUD, or ici c'est des classes métiers.
    Après une tite semaine de boulot/réflexion :
    Pour moi, ce ne sont pas les classes métier. Je distingue les classes générées par Netbeans-JPA de mon code perso.

    Si je change pas mal ma Bdd, alors je refais une génération via Netbeans.

    J'ai donc comme schéma :

    bdd <-> Entities <-> Crud <-> Code métier


    Le GROS avantage est que mon code métier, sur lequel je travaille vraiment, n'est pas pollué par les annotations en tout genre. Et je peux refactoriser mon code à souhait avec un impact minimal.

    Semaine super cool où j'ai l'impression d'avoir découvert l'électricité

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/05/2017, 13h09
  2. Réponses: 8
    Dernier message: 26/03/2008, 17h58
  3. MCD->MPD : deux clés étrangères pour le même champ
    Par Eric2000 dans le forum Schéma
    Réponses: 3
    Dernier message: 04/09/2007, 01h44
  4. Réponses: 2
    Dernier message: 29/07/2007, 12h48
  5. Aide pour MCD avec clés étrangères
    Par tiger33 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2006, 17h01

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