...
esup-commons préconise le développement en couches :
Version:1.0 StartHTML:0000000167 EndHTML:0000005762 StartFragment:0000000762 EndFragment:0000005746
Accès aux données
Pour pouvoir avoir accès à l'objet User donné en exemple au paragraphe précédent la couche métier doit disposer de méthodes dans l'interface DaoService.
...
Pour ce faire JPADaoServiceImpl a besoin d'un gestionnaire d'entité (EntityManager). Ce dernier est simplement obtenu grâce à une annotation :
| Bloc de code |
|---|
@PersistenceContext |
...
public void setEntityManager(EntityManager em) { |
...
this.entityManager = em; |
...
} |
...
Ensuite la propriété entityManager de la classe JPADaoServiceImpl est utilisable pour manipuler les objets. h3.
Recherche
| Bloc de code |
|---|
Query q = entityManager.createQuery("SELECT user FROM User user"); |
...
List<User> users = (List<User>)q.getResultList(); |
Ici on utilise le languege EJB QL. Cf. paragraphe suivant.
Ajout
| Bloc de code |
|---|
entityManager.persist(user); |
Suppression
| Bloc de code |
|---|
User tmp = entityManager.find(User.class, user.getId()); |
...
entityManager.remove(tmp); |
Ici on recherche l'objet avant de le supprimer. C'est une bonne pratique car JPA (Comme Hibernate) utilise une notion de session de persistance. Cette dernière est créée et fermée à chaque requête. Pour pouvoir manipuler correctement les objets il faut qu'ils soient rattachés à la session de persistance. Le fait de faire une recherche préalable permet de le garantir. Si l'objet était déjà rattaché à la session cette recherche n'aurait aucun impact sur la base de données.
Mise à jour
| Bloc de code |
|---|
User user2 = entityManager.merge(user); |
Ici merge permet de mettre à jour l'objet en base de données. L'objet passé en paramètre peut être déjà rattaché à la session de persistance ou non. L'objet qui est renvoyé est une copie de l'objet passé en paramètre et est rattaché à la session de persistance.
...
