Java Persistence API (la suite)
Quelques liens :
La page JPA chez Sun
http://java.sun.com/javaee/technologies/persistence.jsp
Javadoc de l’API JPA 1.0 (JEE 5)
http://java.sun.com/javaee/5/docs/api/javax/persistence/package-summary.html
Javadoc de l’API JPA 2.0 (JEE 6)
http://java.sun.com/javaee/6/docs/api/javax/persistence/package-summary.html
Le tutorial JPA 1.0 (JEE 5)
http://java.sun.com/javaee/5/docs/tutorial/doc/bnbpy.html
Le tutorial JPA 2.0 (JEE 6)
http://java.sun.com/javaee/6/docs/tutorial/doc/bnbpy.html
La page de Wikipedia
http://en.wikipedia.org/wiki/Java Persistence API
De tr`es bons exemples
http://schuchert.wikispaces.com/EJB+3+and+Java+Persistence+API
http://www.java2s.com/Tutorial/Java/0355 JPA/Catalog0355 JPA.htm
Un petit manuel de r´ef´erence
http://jszyzx.scu.edu.cn/resin-doc/amber/index.xtp
Une documentation sur JPQL
http://download.oracle.com/docs/cd/E13189 01/kodo/docs40/full/html/ejb3 overview query.html
1 Rendre la DAO plus g´en´erique
Afin d’´eviter la cr´eation de nombreuses m´ethodes (quatre pour chaque entit´e), nous pouvons maintenant doter
notre classe Dao de nouvelles m´ethodes g´en´eriques :
public <T> T find(Class<T> clazz, Object id) {
EntityManager em = null;
try {
em = newEntityManager();
return em.find(clazz, id);
} finally {
closeEntityManager(em);
}
}
public <T> Collection<T> findAll(String query, Class<T> clazz) {
EntityManager em = null;
try {
em = newEntityManager();
TypedQuery<T> q = em.createQuery(query, clazz);
return q.getResultList();
} finally {
closeEntityManager(em);
}
}
ajout, mise `a jour et destruction :
1
public <T> T add(T entity) {
EntityManager em = null;
try {
em = newEntityManager();
em.persist(entity);
em.getTransaction().commit();
return (entity);
} finally {
closeEntityManager(em);
}
}
public <T> T update(T entity) {
EntityManager em = null;
try {
em = newEntityManager();
entity = em.merge(entity);
em.getTransaction().commit();
} finally {
closeEntityManager(em);
}
return entity;
}
public <T> void remove(Class<T> clazz, Object pk) {
EntityManager em = null;
try {
em = newEntityManager();
T entity = em.find(clazz, pk);
if (entity != null) {
em.remove(entity);
}
em.getTransaction().commit();
} finally {
closeEntityManager(em);
}
}
2 H´eritage
2.1 eritage avec table unique
Nous allons ´etudier la repr´esentation d’un arbre d’h´eritage dans une structure relationnelle. D´efinissons trois
classes : une pour les UE, une autre (qui h´erite de la premi`ere) pour les UE de master et une troisi`eme (qui h´erite
´egalement de la premi`ere) pour les UE de Licence :
2
package monpkg.entities;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class UE implements Serializable {
private static final long serialVersionUID = 1L;
@Id()
private String code;
@Basic()
private int credits;
public UE() {
super();
}
public UE(String code, int credits) {
super();
this.code = code;
this.credits = credits;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getCredits() {
return credits;
}
public void setCredits(int credits) {
this.credits = credits;
}
@Override
public String toString() {
return String.format("UE(code=%s,credits=%d)", code, credits);
}
}
Les UE de Master :
3
package monpkg.entities;
import javax.persistence.Basic;
import javax.persistence.Entity;
@Entity
public class MasterUE extends UE {
private static final long serialVersionUID = 1L;
@Basic
private String masterName;
public MasterUE() {
super();
}
public MasterUE(String code, int credits, String masterName) {
super(code, credits);
this.masterName = masterName;
}
public String getMasterName() {
return masterName;
}
public void setMasterName(String masterName) {
this.masterName = masterName;
}
@Override
public String toString() {
return String.format("MasterUE(code=%s,credits=%d,master=%s)",
getCode(), getCredits(), masterName);
}
}
Les UE de Licence :
4
package monpkg.entities;
import javax.persistence.Basic;
import javax.persistence.Entity;
@Entity
public class LicenceUE extends UE {
private static final long serialVersionUID = 1L;
@Basic
private String description;
public LicenceUE() {
super();
}
public LicenceUE(String code, int credits, String description) {
super(code, credits);
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return String.format("LicenceUE(code=%s,credits=%d,description=%s)",
getCode(), getCredits(), description);
}
}
Travail `a faire : Faites un test unitaire en cr´eant (en base) une instance de chaque classe. Analysez la table
unique cr´e´ee par JPA. Utilisez ensuite la m´ethode findAll pour chaque classe et v´erifiez que vous obtenez 3 UE,
1 UE de Master et 1 UE de Licence.
2.2 eritage avec table de jointure
Dans cette deuxi`eme strat´egie, les classes sont repr´esent´ees par plusieurs tables mais les propri´et´es communes
sont repr´esent´ees une seule fois :
...
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class UE implements Serializable {
...
}
Travail `a faire : N’oubliez pas d´etruire la table pr´ec´edente avant d’ex´ecuter cette version. Analysez les tables
cr´e´ees par JPA.
5
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !