Vous êtes sur la page 1sur 4

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 com.gestionbanque
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 com.gestionbanque.entities 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) {
this.nom = nom; this.email = 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();
this.codeCompte = codeCompte;
this.dateCreation = dateCreation;
this.solde = solde;
this.client = 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);
this.decouvert = 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);
this.taux = 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();
this.dateOperation = dateOperation;
this.montant = montant;
this.compte = 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=FetchType.LAZY)
private Collection<Compte> comptes;
Pour la classe Compte :

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE_CPTE",
discriminatorType=DiscriminatorType.STRING, 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=DiscriminatorType.STRING, 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/application.properties introduisez les
paramètres de configuration de la source de données comme suit :

spring.datasource.url = jdbc:mysql://localhost:3306/banque
spring.datasource.username = root
spring.datasource.password =
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect
3. Démarrez l’application Banque en exécutant le programme main de la classe
com.gestionBanque.BanqueApplication et vérifiez la création et la structure des
différentes tables dans la base de données.

Vous aimerez peut-être aussi