Projets
Pages enfant
  • 3.3.5 Écriture du code d'accès aux objets métiers

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

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.

...