Académique Documents
Professionnel Documents
Culture Documents
6 - Spring Data JPA - Associations
6 - Spring Data JPA - Associations
UP ASI
Bureau E204
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations
PLAN DU COURS
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 2
Diagramme de Classes (sans cardinalité)
T_FORMATION T_FORMATION_DETAIL
T_TP_CORRECTION T_TP
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 3
MCD PHPMYADMIN
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 4
Trouvez et Expliquez les Associations
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 5
One To One Unidirectionnelle
1 1
T_FORMATION T_FORMATION_DETAIL
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 6
One To One Unidirectionnelle
@Entity
@Table(name = "T_FORMATION")
public class Formation implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FORMATION_ID")
private Long id; // Identifiant formation (Clé primaire)
@Column(name="FORMATION_THEME")
private String theme; // Thème formation
@OneToOne
private FormationDetail formationDetail;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 7
One To One Unidirectionnelle
@Entity
@Table(name="T_FORMATION_DETAIL")
public class FormationDetail implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FD_ID")
private Long fdId;
@Column(name="FD_TABLE_MATIERE")
private String fdTableMatiere;
@Column(name="FD_SUPPORT_PDF")
private String fdSupportPDF;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 8
One To One Unidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 9
One To One Bidirectionnelle
1 1
T_FORMATION T_FORMATION_DETAIL
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 10
One To One Bidirectionnelle
@Entity
@Table(name = "T_FORMATION")
public class Formation implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FORMATION_ID")
private Long id; // Identifiant formation (Clé primaire)
@Column(name="FORMATION_THEME")
private String theme; // Thème formation
@OneToOne
private FormationDetail formationDetail;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 11
One To One Bidirectionnelle
@Entity
@Table(name="T_FORMATION_DETAIL")
public class FormationDetail implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FD_ID")
private Long fdId;
@Column(name="FD_TABLE_MATIERE")
private String fdTableMatiere;
@Column(name="FD_SUPPORT_PDF")
private String fdSupportPDF;
@OneToOne(mappedBy="formationDetail")
private Formation formation;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 12
One To One Bidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 13
One To Many Unidirectionnelle
1 *
T_TP T_TP_CORRECTION
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 14
One To Many Unidirectionnelle
@Entity
@Table(name = "T_TP")
public class TravauxPratiques implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TP_ID")
Long tpId;
@Column(name="TP_SUJET")
String tpSujet;
@Column(name="TP_DUREE")
Long tpDuree;
@OneToMany(cascade = CascadeType.ALL)
private Set<TpCorrection> TpCorrections;
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="TC_ID")
private Long tcId;
@Column(name="TC_CORRECTION")
private String tcCorrection;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 16
One To Many Unidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 17
One To Many Bidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 18
Many To One Unidirectionnelle
* 1
T_TP_CORRECTION T_TP
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 19
Many To One Unidirectionnelle
@Entity
@Table(name="T_TP_CORRECTION")
public class TpCorrection implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="TC_ID")
private Long tcId;
@Column(name="TC_CORRECTION")
private String tcCorrection;
@ManyToOne(cascade = CascadeType.ALL)
TravauxPratiques travauxPratiques;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 20
Many To One Unidirectionnelle
@Entity
@Table(name = "T_TP")
public class TravauxPratiques implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TP_ID")
Long tpId;
@Column(name="TP_SUJET")
String tpSujet;
@Column(name="TP_DUREE")
Long tpDuree;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 21
Many To One Unidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 22
Many To One Bidirectionnelle
* 1
T_TP_CORRECTION T_TP
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 23
Many To One Bidirectionnelle
@Entity
@Table(name="T_TP_CORRECTION")
public class TpCorrection implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="TC_ID")
private Long tcId;
@Column(name="TC_CORRECTION")
private String tcCorrection;
@ManyToOne
TravauxPratiques travauxPratiques;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 24
Many To One Bidirectionnelle
@Entity
@Table(name = "T_TP")
public class TravauxPratiques implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TP_ID")
Long tpId;
@Column(name="TP_SUJET")
String tpSujet;
@Column(name="TP_DUREE")
Long tpDuree;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 25
Many To One Bidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 26
Many To Many Unidirectionnelle
* *
T_FORMATION T_TP
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 27
Many To Many Unidirectionnelle
@Entity
@Table(name = "T_FORMATION")
public class Formation implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FORMATION_ID")
private Long id; // Identifiant formation (Clé primaire)
@Column(name="FORMATION_THEME")
private String theme; // Thème formation
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="FK_FD_ID")
private FormationDetail formationDetail;
@ManyToMany(cascade = CascadeType.ALL)
private Set<TravauxPratiques> formationTps;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 28
Many To Many Unidirectionnelle
@Entity
@Table(name = "T_TP")
public class TravauxPratiques implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TP_ID")
Long tpId;
@Column(name="TP_SUJET")
String tpSujet;
@Column(name="TP_DUREE")
Long tpDuree;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 29
Many To Many Unidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 30
Many To Many Bidirectionnelle
* *
T_FORMATION T_TP
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 31
Many To Many Bidirectionnelle
@Entity
@Table(name = "T_FORMATION")
public class Formation implements Serializable {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column(name="FORMATION_ID")
private Long id; // Identifiant formation (Clé primaire)
@Column(name="FORMATION_THEME")
private String theme; // Thème formation
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="FK_FD_ID")
private FormationDetail formationDetail;
@ManyToMany(cascade = CascadeType.ALL)
private Set<TravauxPratiques> formationTps;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 32
Many To Many Bidirectionnelle
@Entity
@Table(name = "T_TP")
public class TravauxPratiques implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TP_ID")
Long tpId;
@Column(name="TP_SUJET")
String tpSujet;
@Column(name="TP_DUREE")
Long tpDuree;
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 33
Many To Many Bidirectionnelle
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 34
CASCADE
@ManyToMany(mappedBy="formationTps",
cascade = {CascadeType.PERSIST, CascadeType.REMOVE},
fetch=FetchType.EAGER)
private Set<Formation> formations;
• Par défaut (si on ne met pas CascadeType), aucune opération n’est cascadée.
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 35
FETCH
@ManyToMany(fetch=FetchType.EAGER)
private Set<TravauxPratiques> formationTps;
• Par défaut (Si one ne met pas FetchType), les valeurs par défaut sont :
– OneToMany et ManyToMany : LAZY
– ManyToOne et OneToOne : EAGER
(Quand c'est Many à la fin, c'est LAZY car on risque de récupérer beaucoup d'éléments "Many"
c’est dangereux. Quand c'est One à la fin c'est EAGER.
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 36
Exercice
Dans le projet tp magasin/Stock et après avoir créer les entités lors de la dernière
séance, vous devez :
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations 38
Spring Data JPA – Associations
Département Informatique
UP Architectures des Systèmes d'Information
Bureau E204
© 2021-2022 – ESPRIT – Module ARCHITECTURE DES SI II SPRING – Spring Data JPA – Associations