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