La réponse est non, mais les arguments durs à exposer.
Pour commencer, on va commencer par la couche basse.
La couche basse, que l'on va appeler "entity" est manipulée par les DAO (
https://www.baeldung.com/java-dao-pattern ).
C'est en général, JPA/Hibernate qui est utilisé, mais on peut utiliser autre chose qu'une BDD Relationnelle (MongoDB,...), voir un autre framework (Spring JDBC...).
Partons des tables. Tu as une table commande qui a une clé étrangère sur la table client.
Ton Mapping est donc correct, mais il est incomplet.
Cette partie étant critique, je recommande d'être psychorigide et vieux con, comme:
1 2 3 4 5 6 7 8 9 10 11 12
|
@Entity
@Table(name="COMMANDE")
public class Commande{
//ID et Attribut
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="CLIENT_ID", nullable=false)
private Client client;
//Getter Setter
} |
1 2 3 4 5 6 7 8 9 10
|
@Entity
@Table(name="CLIENT")
public class Client{
//ID Attribut
@ManyToOne(fetch = FetchType.LAZY,mappedBy = "client")
//Getter Setter
} |
Là, on a mappé au mieux la BDD. A noté que j'ai ajouté la notion de LAZY/EAGER qui est fondamentale.
EAGER: Quand tu sélectionne la classe, Hibernate va aussi récupérer la classe lié (ce qui a partir d'un moment, revient à faire des requêtes en plus).
LAZY: On signale le lien mais Hibernate ne va pas chercher les données.
Couche suivante: DTO et Service.
Le lien est sympa, mais au fond, pour le service REST Spring, on n'a pas forcement besoin de toutes les informations.
Admettons que l'on cherche les commandes d'un client connu, là, on va vraiment couper, car en gros, la requête JPQL sera
1 2
|
SELECT commande FROM Commande commande WHERE commande.client.id = :idClient |
Du coup, je n'ai pas besoin de passer à l'extérieur le client lorsque je lui passe la liste des commande.
Mieux, je ne passe peut-être que quelques données de la commande (numéro, date...) et pas le détail.
Donc la DTO devient:
1 2 3 4 5 6 7 8 9 10
|
public class CommandeDTO{
private String numeroComande;
private String date;//Un string ici, sans doute une Date en BDD
//Autre truc que je veux communiquer à l'extérieur
//Le client, j'en ai rien à faire ici
//Des Getter et des Setteur
} |
Cette façon peut aussi te sauver la vie car si tu construit des JSON, tu peux avoir des problème (concrètement des boucles de l'entité).
Ici, tu as les classes mappant la BDD et celles qui serves à communiquer vers l'extérieur. A toi de mapper dans un sens ou l'autre.
Partager