0% ont trouvé ce document utile (0 vote)
8 vues21 pages

Mots-clés JPQL pour Spring Data JPA

Transféré par

benbelaiidsarah
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues21 pages

Mots-clés JPQL pour Spring Data JPA

Transféré par

benbelaiidsarah
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Services Avancés

Services Avancés :

Keywords
JPQL
TP9

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 1


KEYWORDS

• Spring Data JPA va créer le code pour les méthodes que tu souhaites utiliser. Il
suffit de lui indiquer les méthodes à utiliser :

Keyword Sample Equivalent to

Select p from Reservation r where


GreaterThan findByanneeUniversitaireGreaterThan(Date dateAU);
[Link] > :dateAU

LessThan findByanneeUniversitaireLessThan(Date dateAU); TODO in class

findByanneeUniversitaireBetween(Date dFrom, Date


Between TODO in class
dTo);
IsNotNull,
findByNumeroChambreNotNull(); TODO in class
NotNull
IsNull, Null findByDescriptionNull(); TODO in class

Like findByAdresseLike(String add); TODO in class

findByPrenomEtudiantAndNomEtudiat(String p,
Contains TODO in class
String n);
(No keyword) Long count(); TODO in class

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 2


KEYWORDS

• Afficher la liste des chambres qui ont un type donné (double par exemple) .

@Repository
public interface ChambreRepository extends JpaRepository<Chambre, Long>
{
List<Chambre> findAllByTypeChambre(TypeChambre tc);
}

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 3


KEYWORDS

• Afficher la chambre qui a un numéro donné.

@Repository
public interface ChambreRepository extends JpaRepository<Chambre, Long>
{
Chambre findChambreByNumeroChambre(long numC);
}

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 4


JPQL

• JPQL = Jakarta Persistence Query Language

• JPQL peut être considéré comme une version orientée objet de SQL.

• En JPQL, on sélectionne des objets d'une entité (une classe annotée par @Entity)
en utilisant les noms des attributs et le nom de la classe de l’entité en question et
non plus ceux de la table de base de données et ses colonnes.

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 5


JPQL : SELECT

• Ces méthodes permettent de récupérer les entreprises avec une adresse donnée :
• JPQL :
@Query("SELECT e FROM Entreprise e WHERE [Link] =:adresse")
List<Entreprise> retrieveEntreprisesByAdresse(@Param("adresse") String adresse);

C’est équivalent à :
@Query("SELECT e FROM Entreprise e WHERE [Link] = ?1")
List<Entreprise> retrieveEntreprisesByAdresse(String adresse);

Supposons que nous avons mapper l’entité Entreprise avec la table associé T_Entreprise
• Native Query (SQL et non JPQL) :
@Query(value = "SELECT * FROM T_Entreprise e WHERE e.entreprise_adresse = :adresse",
nativeQuery = true)
List<Entreprise> retrieveEntreprisesByAdresse(@Param("adresse") String adresse);

C’est équivalent à :
@Query(value = "SELECT * FROM T_Entreprise e WHERE e.entreprise_adresse = ?1" ,
nativeQuery = true)
List<Entreprise> retrieveEntreprisesByAdresse( String adresse);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 6


JPQL : SELECT

• Ces méthodes permettent de récupérer les entreprises qui ont une équipe avec une spécialité
donnée :
• JPQL :
@Query("SELECT entreprise FROM Entreprise entreprise , Equipe equipe where
[Link] = [Link] and [Link] =:specialite")
List<Entreprise> retrieveEntreprisesBySpecialiteEquipe(@Param("specialite")
String specialite);

• Native Query (SQL et non JPQL) :


@Query(value = "SELECT * FROM T_ENTREPRISE entreprise INNER JOIN T_EQUIPE equipe
ON entreprise.ENTREPRISE_ID = equipe.ENTREPRISE_ENTREPRISE_ID where
equipe.EQUIPE_SPECIALITE =:specialite", nativeQuery = true)
List<Entreprise> retrieveEntreprisesBySpecialiteEquipe(@Param("specialite")
String specialite);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 7


JPQL : SELECT

• Cette méthode permet d’afficher les projets qui ont un coût supérieur à coût donné dt et une
technologie donnée.
• JPQL :

@Query("SELECT projet FROM Projet projet, Chambre detail where "

+ "[Link] = [Link] "

+ "and [Link] =:technologie "

+ "and detail.cout_provisoire >:cout_provisoire")


List<Projet> retrieveProjetsByCoutAndTechnologie(@Param("technologie") String technologie,

@Param("cout_provisoire") Long cout_provisoire);


• Native Query (SQL et non JPQL) :
@Query(value = "SELECT * FROM T_PROJET projet INNER JOIN T_PROJET_DETAIL detail ON
detail.PD_ID = projet.PROJET_DETAIL_PD_ID WHERE detail.PD_TECHNOLOGIE = ?1 and
detail.PD_COUT_PROVISOIRE > ?2", nativeQuery = true)
List<Projet> retrieveProjetsByCoutAndTechnologie(@Param("technologie") String technologie,

@Param("cout_provisoire") Long cout_provisoire);


© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 8
JPQL : SELECT

• Cette méthode permet d’afficher les équipes qui travaillent sur une technologie donnée dont le
projet n’a pas encore commencé.
• JPQL :

@Query ("SELECT equipe FROM Equipe equipe"

+ " INNER JOIN [Link] projet"

+ " INNER JOIN Chambre detail"

+ " ON [Link] = [Link]"

+ " where [Link] > current_date"

+ " and [Link] =:technologie")

List<Equipe> retrieveEquipesByProjetTechnologie(@Param("technologie")

String technologie);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 9


JPQL : UPDATE

• Si nous souhaitons faire un UPDATE, DELETE et INSERT, nous devons ajouter


l’annotaion @Modifying pour activer la modification de la base de données.

• Cette méthode permet de mettre à jour l’adresse de l’entreprise.

• JPQL :
@Modifying

@Query("update Entreprise e set [Link] = :adresse where [Link] =


:idEntreprise")

int updateEntrepriseByAdresse(@Param("adresse") String adresse,


@Param("idEntreprise")

Long idEntreprise);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 10


JPQL : DELETE

• Cette méthode permet de supprimer les entreprises qui ont une adresse donnée :

• JPQL :
@Modifying

@Query("DELETE FROM Entreprise e WHERE [Link]= :adresse")

int deleteEntreprisebyadresse(@Param("adresse") String adresse);

C’est équivalent à :

@Modifying

@Query("DELETE FROM Entreprise e WHERE [Link]= ?1")

int deleteFournisseurByCategorieFournisseur(String adresse);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 11


JPQL : INSERT

• Cette méthode permet d’insérer des projets dans la table T_Projet:

• JPQL : Nous utilisons Spring Data JPA. Or INSERT ne fait pas partie des spécifications
JPA. Donc, nous sommes obligés d’utiliser les Natives Query pour le INSERT.
• Pas de JPQL pour les requêtes INSERT.

• Native Query (SQL et non JPQL) :


@Modifying
@Query(value = "INSERT INTO T_Projet(projet_sujet) VALUES (:projetsujet)",
nativeQuery = true)
void insertProjet(@Param("projetsujet") String projetsujet);

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 12


TP9
Utiliser le projet tp-foyer développé en classe, pour développer et tester les services
suivants :

- KeyWords : Créer un Service planifié qui tourne toutes les 2 minutes, qui affiche la liste
des blocs non affectés à aucun foyer.

- JPQL : Créer un Service qui permet de trouver la chambre d’un étudiant donné (selon le
CIN de l’étudiant)

- Nous ajouterons d’autres services faisant appel à des Keywords ou JPSL, en classe.

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 13


TP9 – Keywords
Indication pour la méthode avec Keywords :
Dans le Repo : List<Bloc> findAllByFoyerIsNull();

Ajouter 2 blocs, un avec Foyer et un sans Foyer (n’oubliez pas le cascade dans l’entité père vers le fils)
@ManyToOne(cascade = [Link])
Foyer foyer;

{
"nomBloc": "bloc A",
"capaciteBloc": 101,
"foyer": {
"nomFoyer": "F1",
"capaciteFoyer": 1001
}
}

Puis :
{
"nomBloc": "bloc B",
"capaciteBloc": 105
}
© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 14
TP9 – Keywords

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 15


TP9 – JPQL
Indication pour la méthode JPQL :
Pour préparer le test ajouter une chambre avec une réservation et avec un étudiant en même
temps (n’oubliez pas l’annotation cascade aux bon endroits) :

@OneToMany(cascade = [Link])
@[Link]
@JsonIgnore
Set<Reservation> reservations;

@[Link]
@JsonIgnore
@ManyToMany(cascade = [Link])
Set<Etudiant> etudiants;

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 16


TP9 – JPQL
Indication pour la méthode JPQL : Pour préparer le test ajouter une chambre avec une réservation
et avec un étudiant en même temps :

{
"numeroChambre": 105,
"typeChambre": "SIMPLE",
"reservations": [
{
"idReservation": "Res-123",
"anneeUniversitaire": "2023-11-26T14:05:14.824Z",
"estValide": true,
"etudiants": [
{
"nomEtudiant": "ASKRI",
"prenomEtudiant": "Mohamed",
"cinEtudiant": 123321,
"dateNaissance": "2023-11-26T14:05:14.824Z"
}
]
}
]
} © 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 17
TP9 – JPQL
Indication pour la méthode JPQL :

Repo:
@Query("SELECT distinct (ch) FROM Chambre ch " +
"INNER JOIN [Link] r " +
"INNER JOIN [Link] e " +
"WHERE [Link]=:cin " )
Chambre trouverChselonEt(long cin);

Entiy (pour éviter la boucle infinie car relation OneToMany :


@OneToMany(cascade = [Link])
@[Link]
@JsonIgnore
Set<Reservation> reservations;

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 18


TP9 – JPQL

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 19


TP9

- Quand utiliser les Keywords et quand utiliser le JPQL?


Il y a plusieurs cas, nous en parlerons en classe.

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL 20


Diagrammes de Classes

Le foyer est le fils

L’étudiant est le fils

© 2024-2025 – ESPRIT – Module ASI II (Spring) – Spring - Keywords JPQL

Vous aimerez peut-être aussi