EJB Entité
Transcription
EJB Entité
Les EJB Entity Cours 1 Les EJB – les EJB entity 5 DEC. : choix du projet et binôme Jeudi 5 Janv. : évaluation à l'ecrit (1h30) Lundi 9 janv. : travail projets. Mercredi 11 : soutenance projets. 2 Les EJB – les EJB entity EJB entité : s’occupe des données Représente une entité du monde réel concrète (client, facture) ou abstraite (réservation, enchère) Persistant = son composant existe physiquement sur un support de stockage comme une base de données, un fichier XML… JPA (Java Persistence API) : le paquetage javax.persistence 3 EJB3 – Les EJB entité Abstraction complète du stockage des données Mapping objet/relationnel Une classe une table Un champ une colonne d'une table Un objet un tuple 4 EJB3 – Les EJB entité Une propriété persistante property a deux méthodes : getProperty et setProperty La classe implemente Serializable. Elle a un constructeur sans argument obligatoire. 5 EJB Entité – la classe de l'EJB @Entity Public class User implements Serializable { public enum SexType {MALE, FEMALE}; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name=cle) private int id; @Basic //Optionnel private String prenom; private String nom; @Column(unique=true) private String login; private String password; @Enumerated(value=EnumType.STRING) @Column(length=6) private SexType sexe; @Temporal(TemporalType.DATE) private Date birthDate; @Transient private String AttributNonPersistant; 6 EJB Entité - Utilisation EJB entité locaux => utilisation d'EJB Session façades Utilisation de l'Entity Manager import javax.persistence.EntityManager; EntityManager em; em.persist(utilisateur); // INSERT em.remove(utilisateur); // DELETE em.merge(utilisateur); em.refresh(utilisateur); //UPDATE em.find(Produit.class, id); 7 Requêtes : JPQL Sélectionner une entité : select user from User user where user.nom='Michel' Exécution de la requête : // Construction d'un entity manager EntityManager em = ... ; // construction d'un objet Query Query query = em.createQuery( "select user from User user where user.nom = 'Michel'") ; // exécution et récupération de la liste résultat List<User> users = query.getResultList() ; 8 EJB3 – Les EJB entité Relations entre EJB entite : - One to One (1-1) - One to Many/ Many to One (1-*) - Many to Many (*-*) Relation unidirectionnelle et bidirectionnelle : - Entité maitre et esclave 9 EJB Entité – Les champs relationnels One to One unidirectionnel @Entity public class Utilisateur{ //… @OneToOne @JoinColumn(name="utilisateur_id", referencedColumnName-"id") private Profil profil; //… } @Entity public class Profil{ //… @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; Utilisateur 1 1 Profil 10 EJB Entité – Les champs relationnels One to One bidirectionnel @Entity public class Utilisateur{ //… @OneToOne @JoinColumn(name="utilisateur_id", referencedColumnName-"id") private Profil profil; //… } @Entity public class Profil{ //… @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; Utilisateur 1 1 Profil @OneToOne(mappedBy="profil") private Utilisateur utilisateur; 11 EJB Entité – Les champs relationnels One to Many / Many to One @Entity public class Commande{ //… @ManyToOne @JoinColumn(name="client_id") private Client client; //… } Commande * 1 Client @Entity public class Client{ //… @OneToMany(mappedBy="client") private Collection<Commande> commandes; //… } 12 EJB Entité – Les champs relationnels Many to Many @Entity public class Personne{ //… @ManyToMany @JoinTable(name="Participer", joinColumns=@JoinColumn(name="personne_id", referencedColumnName="id"), inverseJoinColumns=@JoinColumn(name="reunion_id", referencedColumnName="id")) private Collection<Reunion>reunions; //… Personne } id @Entity Public class Reunion{ //… @ManyToMany(mappedBy="reunions") private Collection<Personne> participants; //… } * * Reunion id 13 EJB Entité – Les champs relationnels Opérations en cascade CascadeType.PERSIST : enregistre les entités liées lors de l'enregistrement de l'entité propriétaire CascadeType.MERGE : enregistre les modifications dans les entités liées lors de l'enregistrement de l'entité propriétaire CascadeType.REMOVE : supprime les entités liées lors de la suppression de l'entité propriétaire CascadeType.REFRESH : recharge les entités liées lors du chargement de l'entité propriétaire CascadeType.ALL : cumule les 4 types de cascade 14 EJB Entité – Les champs relationnels One to Many / Many to One @Entity public class Commande{ //… @ManyToOne @JoinColumn(name="client_id") private Client client; //… } @Entity public class Client{ //… @OneToMany(cascade={CascadeType.REMOVE, CascadeType.PERSIST}, mappedBy="client") private Collection<Commande> commandes; //… } Commande * 1 Client 15 EJB Entité – paramétrage de la persistance META-INF\persistance.xml <xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="contactUnit" transaction-type="JTA"> <jta-data-source>java:jboss/datasources/testDS</jta-data-source> </persistence-unit> </persistence> 16 Récaputilatif Conteneur WEB Vue JSP contactForm contactForm Conteneur d’application Contrôleur Servlets AddContactForm AddContactForm Servlet Servlet Modèle FACADE EJB session Remote Stateless ou stateful EJB entity Local contactAdded contactAdded AddContactExecute AddContactExecute Servlet Servlet contactNotAdded contactNotAdded ContactManager ContactManager Navigateur web listContact listContact Contact Contact Contact Contact ListContact ListContact Servlet Servlet 17