Marin
écrite est une classe Java standard, elle ne comporte aucune autre particularité que ses annotations, et nous pouvons donc l'utiliser comme toute classe standard.
Écrivons un premier code capable de créer un marin en base.
Exemple 3. Un premier code utilisant une classe persistante
public class TestJPA { public static void main(String... args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-test") ; EntityManager em = emf.createEntityManager() ; Marin marin = new Marin() ; em.getTransaction().begin() ; em.persist(marin) ; em.getTransaction().commit() ; System.out.println("Id = " + marin.getId()) ; } }
main
standard, que nous allons pouvoir exécuter.
Le point d'entrée d'un code permettant de manipuler des entités JPA est un objet de type
EntityManagerFactory
. Il se crée de façon standard par la ligne de code indiquée. Le nom
jpa-test
doit correspondre à une unité de persistance définie dans un fichier
persistence.xml
. Si cette unité de persistance n'existe pas, ou que ce fichier ne se trouve pas à sa place (répertoire
META-INF
), alors ce code ne pourra pas fonctionner.
Cet objet de type
EntityManagerFactory
modélise notre unité de persistance. C'est à partir de lui que l'on peut construire des objets de type
EntityManager
, qui nous permettent d'interagir avec la base.
Le code de l'exemple construit ensuite un objet de type
Marin
, et le passe en paramètre de la méthode
persist()
de notre objet de type
EntityManager
. Cet appel a pour effet d'écrire en base l'objet
marin
passé en paramètre.
Remarquons que, comme pour toute opération de modification de données en base, cette écriture doit être exécutée dans une transaction. C'est l'objet de l'appel
em.begin()
, puis
em.commit()
pour valider l'écriture des données en base.
Id = 1
, qui indique que le marin a été correctement écrit en base.
Examinons l'état de la base de données.
Marin
, dans laquelle se trouve notre premier marin, et une table
Sequence
. Cette seconde table est une table technique qu'EclipseLink utilise pour générer ses clés primaires.
Marin
générée par NetBeans ne va pas nous être d'une grande utilité, au-delà de nous montrer que notre configuration fonctionne. La seule information qu'elle porte est sa clé primaire, ce qui est un peu maigre.
Ajoutons trois propriétés à notre classe
Marin
:
nom
,
prenom
et
age
, et ajoutons également les
getters
et
setters
associés. Puis modifions notre code de façon à donner des valeurs à ces propriétés.
En exécutant le code de test déjà écrit, on se rend compte qu'EclipseLink a automatiquement pris en compte les nouvelles propriétés de notre classe
Marin
, et écrit les valeurs de ces propriétés en base.
em.begin()
et
em.commit()
. Il existe également une méthode
em.rollback()
, qui permet d'annuler une transaction.
entityManager.persist()
. L'objet sera créé en base sur appel à la méthode
commit()
de la transaction. Toutefois, la valeur de la clé primaire est fixée sur appel à
entityManager.persist()
.
entityManager.remove()
en passant cet objet en paramètre. Cet appel génère une opération
delete
en base de données.
entityManager
expose une méthode
find
qui s'utilise de la façon suivante.
Exemple 4. Utilisation de la méthode
entityManager.find(...)
Marin marin = entityManager.find(Marin.class, 1L) ;