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