Java Persistence API (JPA)
La persistance des données constitue pour une application un moyen de conserver et d'extraire des informations à partir d'un système de stockage rémanent. La persistance est essentielle aux applications d'entreprise du fait de l'accès nécessaire aux bases de données relationnelles. Les applications développées pour cet environnement doivent gérer elles-mêmes la persistance ou utiliser des solutions tierces pour gérer les mises à jour de base de données et les extractions avec persistance. L'API JPA (Java™ Persistence API) offre un mécanisme permettant de gérer la persistance ainsi que le mappage objet/relationnel et les fonctions depuis les spécifications EJB 3.0.
La spécification JPA définit en interne le mappage objet-relationnel au lieu de le confier à des implémentations de mappage spécifiques à leur fournisseur. Elle est basée sur le modèle de programmation Java qui s'applique aux environnements Java Enterprise Edition (Java EE), mais peut également fonctionner dans un environnement Java SE pour tester les fonctions des applications.
JPA représente une simplification du modèle de programmation de persistance. Elle définit explicitement le mappage objet-relationnel au lieu de le confier à des implémentations de mappage spécifiques à leur fournisseur. JPA standardise la tâche importante de mappage objet-relationnel en utilisant des annotations ou XML pour mapper des objets dans une ou plusieurs tables d'une base de données. Pour simplifier plus encore le modèle de programmation de persistance :
- L'API EntityManager peut conserver, mettre à jour, extraire ou supprimer les objets d'une base de données.
- Les métadonnées contenues dans le mappage objet-relationnel et l'API EntityManager traitent la plupart des opérations de base de données sans que l'écriture du code SQL ou JDBC ne soit nécessaire pour conserver la persistance.
- JPA fournit un langage de requête, qui étend le langage de requête EJB indépendant (également connu comme JPQL), que vous pouvez utiliser pour extraire des objets sans avoir à écrire des requêtes SQL spécifiques à la base de données avec laquelle vous travaillez.
JPA est conçu pour fonctionner aussi bien à l'intérieur qu'à l'extérieur d'un conteneur Java Enterprise Edition (Java EE). Si vous exécutez JPA dans un conteneur, les applications pourront l'utiliser pour gérer le contexte de persistance. S'il n'existe aucun conteneur pour gérer JPA, l'application doit gérer le contexte de persistance elle-même. Les applications conçues pour la persistance gérée par conteneur requièrent moins d'implémentation de code pour gérer la persistance, mais elles ne peuvent pas être utilisées en dehors d'un conteneur. Les applications gérant leur propre contexte de persistance peuvent fonctionner dans un environnement de conteneur ou Java SE.
Les conteneurs Java EE prenant en charge le modèle de programmation EJB 3.x doivent gérer une implémentation JPA, également appelée fournisseur de persistance. Un fournisseur de persistance JPA utilise les éléments suivants pour simplifier la gestion de la persistance dans un environnement EJB 3.x :
- Unité de persistance
- Définit un modèle objet-relationnel complet pour le mappage des classes Java (entités + structures de prise en charge) avec une base de données relationnelle. EntityManagerFactory utilise ces données pour créer un contexte de persistance accessible via le gestionnaire EntityManager.
- EntityManagerFactory
- Utilisé pour créer un gestionnaire EntityManager pour les interactions avec la base de données. Les conteneurs du serveur d'applications fournissent généralement cette fonction mais EntityManagerFactory est requis si vous utilisez la persistance JPA gérée par application. Une instance d'un EntityManagerFactory représente un contexte de persistance.
- Contexte de persistance
- Définit l'ensemble des instances actives actuellement manipulées par l'application. Vous pouvez créer le contexte de persistance manuellement ou via injection.
- EntityManager
- Gestionnaire de ressources qui assure la maintenance de la collection active des objets Entity utilisée par l'application. Il traite les interactions avec la base de données et les métadonnées des mappages objet-relationnel. Une instance d'un EntityManager représente un contexte de persistance. Une application dans un conteneur peut obtenir le gestionnaire d'entités via injection dans l'application ou en le recherchant dans l'espace nom du composant Java. Si l'application gère sa persistance, EntityManager est obtenu de EntityManagerFactory.
- Objets Entity
- Classe Java simple qui représente une ligne d'une table de base de données, dans sa forme la plus simplifiée. Les objets Entity peuvent être des classes concrètes ou abstraites. Ils tiennent à jour les états à l'aide de propriétés ou de zones.