JPA Flashcards

1
Q

Quels sont les 4 types de relation entre entités ?

A
  • @OneToOne
  • @OneToMany
  • @ManyToOne
  • @ManyToMany
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Quel type de relation utilisera nécessairement une table de jointure ?

A

@ManyToMany

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Qu’est-ce-qu’une entité ?

A

Une classe Java dont les instances sont persistées en base. Elle est annotée par @Entity.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Quelles est la règle générale pour ce qui est de la persistence des champs ?

A

Chaque champ d’une entité est automatiquement associé à une colonne de même nom, pourvu qu’il soit de type:

  • primitif ou wrapper
  • String
  • énuméré
  • Serializable
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Comment gérer correctement les champs de type date ?

A
  • S’il d’agit d’un champ Date ou Calendar, il faut l’annoter avec @Temporal en spécifiant si l’on veut une DATE, TIME ou TIMESTAMP
  • S’il s’agit d’un champ LocalDate, LocalTime ou LocalDateTime, il n’y a rien besoin de spécifier car la correspondance est directe.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Comment sont gérés les champs énumérés ?

A

Par défaut le champ sera persisté sous forme numérique (ORDINAL). Si l’on souhaite persister une chaine de caractères, il faut le préciser en utilisant @Enumerated(STRIING)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Comment sont persistés les champs de type Serializable ?

A

Dans un blob SQL

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Comment forcer le stockage d’un champ dans un blob ?

A

Au moyen de @Lob

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quelle est la classe centrale de l’API JPA ?

A

La classe EntityManager. Elle gère un contexte de persistence qui contient toutes les entités gérées.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Quelles sont les 5 opérations possibles sur une entité ?

A
  • PERSIST: ajout au contexte de persistence. Elle sera écrite en base quand la transaction sera validée.
  • REMOVE: suppression du contexte de persistence: Elle sera effacée de la base quand la transaction sera validée.
  • REFRESH: rafraichissement d’une entité persistente avec les informations de la base.
  • DETACH: détachement du contexte de persistence. Les modifications apportées à l’entité ne seront pas persistées.
  • MERGE: réattachement au contexte de persistence.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Quel est le lien entre les opérations sur les entités et les transactions ?

A

La synchronisation entre le contexte de persistence et la base a lieu quand la transaction est validée.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Quelle est la différence entre entité maitre et entité esclave ?

A

Le côté maitre de la relation contient la clé étrangère vers le côté esclave.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Comment définir une relation bidirectionnelle ?

A

En utilisant l’attribut mappedBy. Attention si on oublie de l’utiliser, on risque de créer deux relations unidirectionnelles.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Définir la notion de cascade

A

Cela permet de spécifier ce qui se passe sur les entités filles quand l’entité mère subit une opération.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Comment fonctionne la suppression d’orphelins ?

A

En utilisant l’attribut orphanRemoval, JPA va détecter les entités filles qui ne sont plus référencées par leur mère, et les supprimer de la base.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Quels sont les deux modes de chargement d’une relation ?

A
  • EAGER: chargement automatique (par défaut)
  • LAZY: chargement à la demande
17
Q

Quels sont les deux moyens de déclarer qu’une collection doit être triée ?

A
  • @OrderBy spécifie quel champ de la fille doit servir pour le tri. Une clause order by sera ajoutée au SQL lors de la récupération des données.
  • @OrderColumn ajoute une colonne dans la table fille, qui ne sera pas présente dans l’entité. C’est le gestionnaire de persistence qui se charge de maintenir cet index à jour.
18
Q

Quelles sont les 3 différentes stratégies d’héritage ?

A

On peut spécifier une des stratégie au moyen de @Inheritance

  • SINGLE_TABLE: utilisation d’un discriminant pour identifier les différentes sous-classes (@DiscriminatorColumn, @DiscriminatorValue).
  • JOINED
  • TABLE_PER_CLASS
19
Q

A quoi sert @MappedSuperclass ?

A

A avoir une entité parent sans

20
Q

Quels sont les avantages et les inconvénients de SINGLE_TABLE ?

A
  • Avantages
    • Simple
    • Efficace
  • Inconvénients
    • Difficile d’ajouter des sous-classes
    • Moins de contrôle sur les colonnes des filles qui doivent être nullables
21
Q

Quels sont les avantages et les inconvénients de JOINED ?

A
  • Avantages
    • Proche du modèle objet
  • Inconvénients:
    • Impact sur les performances à cause des jointures
22
Q

Quels sont les avantages et les inconvénients de TABLE_PER_CLASS ?

A
  • Avantages:
    • Performances
  • Inconvénients:
    • Polymorphisme peu ou pas supporté