JPA Flashcards
Quels sont les 4 types de relation entre entités ?
- @OneToOne
- @OneToMany
- @ManyToOne
- @ManyToMany
Quel type de relation utilisera nécessairement une table de jointure ?
@ManyToMany
Qu’est-ce-qu’une entité ?
Une classe Java dont les instances sont persistées en base. Elle est annotée par @Entity.
Quelles est la règle générale pour ce qui est de la persistence des champs ?
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
Comment gérer correctement les champs de type date ?
- 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.
Comment sont gérés les champs énumérés ?
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)
Comment sont persistés les champs de type Serializable ?
Dans un blob SQL
Comment forcer le stockage d’un champ dans un blob ?
Au moyen de @Lob
Quelle est la classe centrale de l’API JPA ?
La classe EntityManager. Elle gère un contexte de persistence qui contient toutes les entités gérées.
Quelles sont les 5 opérations possibles sur une entité ?
- 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.
Quel est le lien entre les opérations sur les entités et les transactions ?
La synchronisation entre le contexte de persistence et la base a lieu quand la transaction est validée.
Quelle est la différence entre entité maitre et entité esclave ?
Le côté maitre de la relation contient la clé étrangère vers le côté esclave.
Comment définir une relation bidirectionnelle ?
En utilisant l’attribut mappedBy. Attention si on oublie de l’utiliser, on risque de créer deux relations unidirectionnelles.
Définir la notion de cascade
Cela permet de spécifier ce qui se passe sur les entités filles quand l’entité mère subit une opération.
Comment fonctionne la suppression d’orphelins ?
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.
Quels sont les deux modes de chargement d’une relation ?
- EAGER: chargement automatique (par défaut)
- LAZY: chargement à la demande
Quels sont les deux moyens de déclarer qu’une collection doit être triée ?
- @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.
Quelles sont les 3 différentes stratégies d’héritage ?
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
A quoi sert @MappedSuperclass ?
A avoir une entité parent sans
Quels sont les avantages et les inconvénients de SINGLE_TABLE ?
- Avantages
- Simple
- Efficace
- Inconvénients
- Difficile d’ajouter des sous-classes
- Moins de contrôle sur les colonnes des filles qui doivent être nullables
Quels sont les avantages et les inconvénients de JOINED ?
- Avantages
- Proche du modèle objet
- Inconvénients:
- Impact sur les performances à cause des jointures
Quels sont les avantages et les inconvénients de TABLE_PER_CLASS ?
- Avantages:
- Performances
- Inconvénients:
- Polymorphisme peu ou pas supporté