JPA
EclipseLink
1Présentation
JPA1.0aétéintroduitedanslaspécificationJEE5,laspécificationJEE6définitJPA
2.0
JPAestuneabstractiondelacoucheJDBC,lesclassesetlesannotationsJPAsont
danslepackagejavax.persistance.Lesannotationsdemapping peuventêtre
regroupéesendeuxcatégories:
Logique:descriptiondumodèled'entités.
Physique:descriptiondestablesetdesrelationsdelabasededonnées
Composants:
ORM:mécanismedemapping relationnelobjet
L’APIEntity ManagerquigèrelesopérationsCRUD
JPQL:langagederequêteorientéobjet.
JTA(JavaTransactionAPI):Mécanismedegestiondesverrouillagesetdestransactionsdans
unenvironnementconcurrent
CallBack etlisteners
Frameworks depersistanceJPA
TopLink.
EclipseLink (framework deréférenceJPA,basésurTopLink).
Hibernate.
2Exemple
Etape2créationdel'entitédepersistance
packagejpa;
importjavax.persistence.*;
@Entity
publicclassClientimplements Serializable {
@Id
private Longid;
private Stringprenom;
private Stringnom;
private StringdateNaissance;
private StringdateCreation;
private int age;
private Stringemail;
private Adresseadresse;
//méthodesget etset}
packagejpa;
importjavax.persistence.*;
@Entity
publicclassClientimplements Serializable {
@Id
private Longid;
private Stringprenom;
private Stringnom;
private StringdateNaissance;
private StringdateCreation;
private int age;
private Stringemail;
private Adresseadresse;
//méthodesget etset}
Etape1Mise enplacedel'unitédepersistancedanslefichierMETAINF/persistence.xml
<?xml version="1.0"encoding="UTF8"?>
<persistence version="2.0"xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistenceunit name="jpa1"transactiontype="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>jpa.Client</class>
<properties>
<property name="javax.persistence.jdbc.url"value="jdbc:derby://localhost:1527/bdJpa"/>
<property name="javax.persistence.jdbc.password"value="jpa"/>
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.user"value="jpa"/>
<property name="eclipselink.ddlgeneration"value="createtables"/>
</properties>
</persistenceunit>
</persistence>
<?xml version="1.0"encoding="UTF8"?>
<persistence version="2.0"xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistenceunit name="jpa1"transactiontype="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>jpa.Client</class>
<properties>
<property name="javax.persistence.jdbc.url"value="jdbc:derby://localhost:1527/bdJpa"/>
<property name="javax.persistence.jdbc.password"value="jpa"/>
<property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.user"value="jpa"/>
<property name="eclipselink.ddlgeneration"value="createtables"/>
</properties>
</persistenceunit>
</persistence>
Etape3Utilisationdel'EntityManager
EntityManagerFactory
emf=Persistence.createEntityManagerFactory("jpa1");
EntityManager em=emf.createEntityManager();
Clientcl=newClient();
cl.setAge(3);
cl.setEmail("[email protected]");
cl.setNom("unclient");
cl.setDateNaissace("01/01/1967");
cl.setPrenom("ali");
EntityTransaction tx=em.getTransaction();
tx.begin();
em.persist(cl);
Stringjql ="Selectcfrom Clientc";
Query requete =em.createQuery(jql);
List<Client>liste=requete.getResultList();
for(Clientcli :liste){
System.out.println(cli.getNom());
}
tx.commit();
em.close();
emf.close();
//UtiliserunerequêteJPQL
EntityManagerFactory
emf=Persistence.createEntityManagerFactory("jpa1");
EntityManager em=emf.createEntityManager();
Clientcl=newClient();
cl.setAge(3);
cl.setEmail("[email protected]");
cl.setNom("unclient");
cl.setDateNaissace("01/01/1967");
cl.setPrenom("ali");
EntityTransaction tx=em.getTransaction();
tx.begin();
em.persist(cl);
Stringjql ="Selectcfrom Clientc";
Query requete =em.createQuery(jql);
List<Client>liste=requete.getResultList();
for(Clientcli :liste){
System.out.println(cli.getNom());
}
tx.commit();
em.close();
emf.close();
//UtiliserunerequêteJPQL
L'utilisationdumécanismedestransactionsestobligatoire,danslecas
desopérations(persist,merge etremove),seulelaméthodefind()
nenécessitepasdetransactionpourl'accèsauxdonnées.
Dans lecadred'uneapplicationJavaSEl'utilisationdesméthodes
Beginetcommitestobligatoire,danslecadred'uneapplication
JavaEEl'APIJTAsechargedumécanismedestransactions.
3Entity
Entity
UneclasseEntitéestuneclassejavaquidoitjustifierlesconditionssuivantes:
Etreannotéeparjavax.persistence.Entity oubienelledoitêtredécritedansle
descripteurxml commeuneentité.
LaclassedoitposséderunecléprimaireannotéeparId
Laclassedoitposséderunconstructeurpardéfautpubliqueouprotégé.
Laclassenepeutêtredetypeenum ouinterface
Laclassenedoitpasêtrefinaletnedoitpasposséderdesméthodesdéclaréesfinal,ni
desattributspersistantsdéclarésfinal.
Sidesinstancesdelaclassedoiventêtrepasséesparvaleur,laclasseentitédoit
implémenterl’interfaceSerializable.
Lesattributsdelaclassedéclaréspublicsontignorésparl'unitédepersistance.
L'accèsauxpropriétésestconformeauxJavaBeans.
Annotations
Lannotation@Tablepermetdemodifierlenompardéfautdelatableassociéeàl’entité
@Table(name=" Tlivre").
@NamedQuery(name="Romans",query="SelectlfromLivre lwherel.categorie=5"):
permet dedéfinir une requête JPQL.
@Column:pourpersonnaliser lesattributs
1 / 25 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 !