TP JPA 01 : Introduction à Jakarta Persistence
1 Objectifs
- Comprendre les concepts fondamentaux de JPA
- Savoir configurer un projet avec JPA
- Maîtriser les opérations CRUD de base
- Apprendre à modéliser des entités JPA
2 Étape 1 : Préparer l’environnement
Le TP utilisera une base de données H2 en mémoire pour simplifier la configuration. Vous basculerez vers une base de données réelle dans la suite.
https://repo1.maven.org/maven2/com/h2database/h2/2.3.232/h2-2.3.232.jar
java -cp h2*.jar \
org.h2.tools.Server \
-webAllowOthers \
-tcpAllowOthers \
-pgAllowOthers \
-ifNotExists
lancer H2 pour accéder à la console web : http://localhost:8082 avec une base de données testdb et le user sa sans mot de passe.
Créer un projet Java Maven avec IntelliJ ou VSCode :
- Définissez bien les informations suivantes en les adaptant à votre projet :
- Group ID :
com.example.jpa.tps
- Artifact ID :
tp01
- Version :
0.1.0-SNAPSHOT
.
- Group ID :
- Définissez bien les informations suivantes en les adaptant à votre projet :
Ajouter les dépendances Jakarta Persistence et H2 dans le
pom.xml
:dependencies> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.2.0</version> <dependency> </dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.6.4.Final</version> <dependency> </dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.3.232</version> <scope>runtime</scope> <dependency> </dependencies> </
Configurer le fichier
persistence.xml
:Créez le fichier dans
src/main/resources/META-INF/persistence.xml
et ajoutez :persistence xmlns="https://jakarta.ee/xml/ns/persistence" < xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" version="3.0"> persistence-unit name="tpJakartaUnit"> <class>fr.univtln.bruno.jpa.Person</class> <properties> <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/testdb" /> <property name="jakarta.persistence.jdbc.user" value="sa" /> <property name="jakarta.persistence.jdbc.password" value="" /> < <!-- Database creation: none, create, drop-and-create, drop --> property name="jakarta.persistence.schema-generation.database.action" < value="drop-and-create" /> <!-- Script generation: none, create, drop-and-create, drop --> property name="jakarta.persistence.schema-generation.scripts.action" < value="drop-and-create"/> <!-- The paths of scripts generated by JPA --> property name="jakarta.persistence.schema-generation.scripts.create-target" < value="generated-create.ddl" /> property name="jakarta.persistence.schema-generation.scripts.drop-target" < value="generated-drop.ddl" /> properties> </persistence-unit> </ persistence> </
3 Étape 2 : Créer une première entité
Créer une classe
Person
dans le package :- Cette classe représente une personne avec un identifiant, un nom et un âge.
- Ajoutez les annotations de base Jakarta Persistence.
Exemple de code :
package com.example.tp_jakarta.entities; import jakarta.persistence.*; @Entity @Table(name = "persons") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column private int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } public Long getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Ajouter la classe au
persistence.xml
: Vérifiez que la classePerson
est bien déclarée dans le fichierpersistence.xml
.
4 Étape 3 : Configurer l’EntityManager
Créer une classe
JpaUtil
dans le packagecom.example.tp_jakarta.utils
:- Elle fournira un
EntityManagerFactory
pour simplifier l’accès au gestionnaire d’entités.
Exemple :
import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.Persistence; public class JpaUtil { private static final EntityManagerFactory emf = .createEntityManagerFactory("tpJakartaUnit"); Persistence public static EntityManagerFactory getEntityManagerFactory() { return emf; } public static void close() { .close(); emf} }
- Elle fournira un
Créer une classe
Main
pour tester l’enregistrement d’une entité :- Insérez une personne dans la base de données en utilisant l’
EntityManager
.
Exemple :
import jakarta.persistence.EntityManager; public class Main { public static void main(String[] args) { = JpaUtil.getEntityManagerFactory().createEntityManager(); EntityManager em // Persistance d'une entité .getTransaction().begin(); em= new Person("Alice", 30); Person person .persist(person); em.getTransaction().commit(); em // Lecture de l'entité persistée = em.find(Person.class, person.getId()); Person foundPerson System.out.println("Person found: " + foundPerson.getName() + ", Age: " + foundPerson.getAge()); .close(); em.close(); JpaUtil} }
- Insérez une personne dans la base de données en utilisant l’
Ajoutez des personnes supplémentaires, des modifications et des suppressions pour tester les opérations CRUD.
5 Étape 5 : Activité finale
Créez l’entité suivante pour enrichir votre modèle :
Book
: - Représente un livre avec un titre, un auteur, une année de publication, un ISBN et une description. - Expérimentez avec les annotations Jakarta Persistence pour la modélisation d’une entité sans association.