Finance Islamique
Documents Gratuits : Finance Islamique. Rechercher de 53 000+ Dissertation Gratuites et Mémoirese JPA • Le développeur indique qu’une classe est une entité en lui associant l’annotation @Entity • Ne pas oublier d’importer javax.Persistence.Entity dans les classes entités (idem pour toutes les annotations)
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 9
Exemple d’entité – les champs
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 10
Les constructeurs
/** * Constructeur sans paramètre * obligatoire. */ public Departement() { } public Departement(String nom, String lieu) { this.nom = nom; this.lieu = lieu; }
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 11
Exemple d’entité – l’identificateur
@Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; }
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 12
Exemple d’entité – une propriété
public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; }
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 13
Exemple d’entité – une association
@OneToMany(mappedBy="dept") public Collection getEmployes() { return employes; } public void setEmployes(Collection emps) { this.employes = emps; }
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 14
Configuration de la connexion
• Il est nécessaire d’indiquer au fournisseur de persistance comment il peut se connecter à la base de données • Les informations doivent être données dans un fichier persistence.xml situé dans un répertoire META-INF dans le classpath • Ce fichier peut aussi comporter d’autres informations ; il est étudié en détails dans la suite du cours
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 15
Exemple (début)
jpa.Departement jpa.Employe
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 16
Exemple (fin)
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 17
Gestionnaire d’entités
• Classe javax.persistence.EntityManager • Le gestionnaire d’entités (GE) est l’interlocuteur principal pour le développeur • Il fournit les méthodes pour gérer les entités : les rendre persistantes, les supprimer de la base de données, retrouver leurs valeurs dans la base, etc.
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Exemple de code (1) en dehors d’un serveur d’application
Page 18
EntityManagerFactory emf = Persistence. createEntityManagerFactory("employes"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); em.tx.begin(); Dept dept = new Dept("Direction", "Nice"); em.persist(dept); dept.setLieu("Paris"); tx.commit();
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 19
Exemple de code (2)
String queryString = "SELECT e FROM Employe e " + “WHERE e.poste = :poste"; Query query = em.createQuery(queryString); query.setParameter("poste", "INGENIEUR"); List liste = query.getResultList(); for (Employe e : liste) { System.out.println(e.getNom()); } em.close(); emf.close()
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 20
Contexte de persistance
• La méthode persist(objet) de la classe EntityManager rend persistant un objet • L’objet est ajouté à un contexte de persistance qui est géré par le GE • Toute modification apportée à un objet du contexte de persistance sera enregistrée dans la base de données • L’ensemble des entités gérées par un GE s’appelle un contexte de persistance
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 21
II. Entités
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 22
Caractéristiques
• Seules les entités peuvent être
o o o o
renvoyées par une requête (Query) passées en paramètre d’une méthode d’un EntityManager ou d’un Query le but d’une association référencées dans une requête JPQL
• Une classe entité peut utiliser d’autres classes pour conserver des états persistants (MappedSuperclass ou Embedded étudiées plus loin)
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 23
Conditions pour les classes entités
• Elle doit posséder un attribut qui représente la clé primaire dans la BD (@Id) • Une classe entité doit avoir un constructeur sans paramètre protected ou public • Elle ne doit pas être final • Aucune méthode ou champ persistant ne doit être final • Si une instance peut être passée par valeur en paramètre d’une méthode comme un objet détaché, elle doit implémenter Serializable
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 24
2 types d’accès
• Le fournisseur de persistance accédera à la valeur d’une variable d’instance
o o
soit en accédant directement à la variable d’instance soit en passant par ses accesseurs (getter ou setter)
• Le type d’accès est déterminé par l’emplacement des annotations (associées aux variables d’instance ou aux getter)
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 25
Accès par propriété
• Les accesseurs (setter et getter) doivent être protected ou public • Ils peuvent contenir d’autres instructions que le seul code lié à la valeur de la variable sous-jacente • Ces instructions seront exécutées par le fournisseur de persistance • Si une exception est levée par un accesseur, la transaction est invalidée ; les exceptions contrôlées sont enveloppées par une PersistenceException (non contrôlée, sous RuntimeException)
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 26
Choix du type d’accès
• Le choix doit être le même pour toutes les classes d’une hiérarchie d’héritage (interdit de mélanger les 2 façons) • En programmation objet il est conseillé d’utiliser plutôt les accesseurs que les accès directs aux champs (meilleur contrôle des valeurs) ; c’est aussi le cas avec JPA • Rappel : le choix est déterminé par l'emplacement des annotations ; elles sont associées soit aux accesseurs, soit aux variables d'instance ; ne pas mélanger les 2 !
Esprit 2009/2010
Adel ELJ (Architecte J2EE)
Page 27
Cycle de vie d’une instance d’entité
• L’instance peut être
o
...