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

Relu

Relecture RB

Sommaire :


esup-commons préconise le développement en couches :

 

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.

Dans notre exemple, c'est la classe JPADaoServiceImpl, implémentant l'interface DaoService qui permet de manipuler les entités via les mécanismes de JPA.

Typiquement une telle classe va proposer des méthodes pour rechercher, ajouter, supprimer et modifier des objets.

Pour ce faire JPADaoServiceImpl a besoin d'un gestionnaire d'entité (EntityManager). Ce dernier est simplement obtenu grâce à une annotation :

@PersistenceContext
public void setEntityManager(EntityManager em) {
	this.entityManager = em;
}

Ensuite la propriété entityManager de la classe JPADaoServiceImpl est utilisable pour manipuler les objets.

Recherche

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

entityManager.persist(user);

Suppression

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

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.

  • Aucune étiquette