JPA Hibernate : Gestion des comptes bancaires
Objectif :
L’objectif du TP est d’étudier le mapping objet relationnel et de se familiariser avec les
annotations JPA à travers l’implémentation des entités JPA d’une application de gestion des
comptes bancaires.
Partie I : Création des entités bean de l’application
L’application gère deux types de comptes : compte courante et compte épargne. Chaque compte
subit plusieurs opérations de versement ou de retrait. Un client peut posséder plusieurs
comptes mais un compte est associé à un seul client comme présenté dans le diagramme de
classe suivant :
class Class Mo...
Serializable Serializable
Serializable
Compte Operation
Client
-client -comptes -compte -operations
- client: Client - dateOperation: Date
- code: Long
1..1 0..* - codeCompte: String 1..1 0..* - montant: double
- email: String
- dateCreation: Date - numero: Long
- nom: String
- solde: double
CompteEpargne CompteCourant Retrait Versement
- taux: double - decouvert: double
1. Créez un projet Spring Starter Project avec le nom Banque avec [Link]
comme package de base et Maven comme gestionnaire de dépendance. Choisir JPA,
MySQL, Rest Repositories, Thymeleaf et Web comme dépendances.
2. Créez un package [Link] et y mettre les différentes classes entité
de l’application : Client, Compte, CompteCourant, CompteEpargne, Operation,
Versement et Retrait.
Notez que les classes Compte et Operation sont des classes abstraites
Client
public class Client implements Serializable {
private static final long serialVersionUID = 1L;
private Long code;
private String nom;
private String email;
private Collection<Compte> comptes;
public Client() { }
public Client(String nom, String email) {
[Link] = nom; [Link] = email;
}
// Getters/Setters + toString()
}
Compte
public abstract class Compte implements Serializable {
private static final long serialVersionUID = 1L;
private String codeCompte;
private Date dateCreation;
private double solde;
private Client client;
private Collection<Operation> operations;
public Compte() { }
public Compte(String codeCompte, Date dateCreation, double solde,
Client client) {
super();
[Link] = codeCompte;
[Link] = dateCreation;
[Link] = solde;
[Link] = client;
}
// Getters/Setters + toString()
}
CompteCourant
public class CompteCourant extends Compte {
private static final long serialVersionUID = 1L;
private double decouvert;
public CompteCourant() { }
public CompteCourant(String codeCompte, Date dateCreation,
double solde, Client client, double decouvert) {
super(codeCompte, dateCreation, solde, client);
[Link] = decouvert;
}
// Getters/Setters + toString()
}
CompteEpargne
public class CompteEpargne extends Compte {
private static final long serialVersionUID = 1L;
private double taux;
public CompteEpargne() { }
public CompteEpargne(String codeCompte, Date dateCreation,
double solde, Client client, double taux) {
super(codeCompte, dateCreation, solde, client);
[Link] = taux;
}
// Getters/Setters + toString()
}
Operation
public abstract class Operation implements Serializable {
private static final long serialVersionUID = 1L;
private Long numero;
private Date dateOperation;
private double montant;
private Compte compte;
public Operation() {}
public Operation(Date dateOperation, double montant, Compte compte) {
super();
[Link] = dateOperation;
[Link] = montant;
[Link] = compte;
}
// Getters/Setters + toString()
}
Versement
public class Versement extends Operation {
private static final long serialVersionUID = 1L;
public Versement() { }
public Versement(Date dateOperation, double montant, Compte compte) {
super(dateOperation, montant, compte);
}
}
Retrait
public class Retrait extends Operation {
private static final long serialVersionUID = 1L;
public Retrait() { }
public Retrait(Date dateOperation, double montant, Compte compte) {
super(dateOperation, montant, compte);
}
}
Partie II : Ajout des annotations JPA aux entités
Ajoutez les différentes annotations de persistance JPA aux entités de l’application.
Pour la classe Client :
@Entity
public class Client implements Serializable {
@Id @GeneratedValue
private Long code;
...
@OneToMany(mappedBy="client", fetch=[Link])
private Collection<Compte> comptes;
Pour la classe Compte :
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_CPTE",
discriminatorType=[Link], length=2)
public abstract class Compte implements Serializable {
@Id
private String codeCompte;
...
@ManyToOne
@JoinColumn(name="CODE_CLI")
private Client client;
@OneToMany(mappedBy="compte")
private Collection<Operation> operations;
Pour la classe CompteCourant :
@Entity
@DiscriminatorValue("CC")
public class CompteCourant extends Compte {
Pour la classe CompteEpargne :
@Entity
@DiscriminatorValue("CE")
public class CompteEpargne extends Compte {
Pour la classe Operation :
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_OP",
discriminatorType=[Link], length=1)
public abstract class Operation implements Serializable {
@Id @GeneratedValue
private Long numero;
...
@ManyToOne
@JoinColumn(name="CODE_CPTE")
private Compte compte;
Pour la classe Versement :
@Entity
@DiscriminatorValue("V")
public class Versement extends Operation {
Pour la classe Retrait :
@Entity
@DiscriminatorValue("R")
public class Retrait extends Operation {
Partie III : Configuration de la source de données
1. Démarrez MySql et créez une base de données banque.
2. Dans le fichier src/main/ressources/[Link] introduisez les
paramètres de configuration de la source de données comme suit :
[Link] = jdbc:mysql://localhost:3306/banque
[Link] = root
[Link] =
[Link] = [Link]
[Link]-sql = true
[Link]-auto = create
[Link]= [Link].MySQL5Dialect
3. Démarrez l’application Banque en exécutant le programme main de la classe
[Link] et vérifiez la création et la structure des
différentes tables dans la base de données.