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 :
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 ?
- player : idPlayer (PK), email
- site : idSite (PK), website
- rate_player_site : idRate (PK), idPlayer (FK), idSite (FK), rate
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 :
Le problème vient aux noms choisits : idPlayer et idSite au lieu de player et site.
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; } }
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 ?
Partager