Tu as mal lu, comme j'ai dis, j'utilise les fonctions de base de mon ORM (Hibernate en l'occurence) en évitant par exemple le "piège" du N+1 requêtes propre aux ORM. Et je reproche que bien des projets le fasse déjà de travers, alors qu'il s'agit bien du tout début de ce qu'un ORM comme Hibernate peut faire.
Je n'ai aucun problème à faire une série de requête, en SQL en JDBC (avec curseur s'il le faut) ou en Hibernate ou du Criteria API avec filtrage des colonnes de résultats, jointures et sous-requêtes s'il le faut (sans partir sur des trucs délirant qu'il vaudrait mieux faire en SQL bruts quand même).
Je suis pas un pro mais je suis familier sur la chaîne des éléments impliqué par exemple sur un Select fait via du JPA
- Allocation d'une connexion du pool de connexion (si ce n'est pas encore le cas)
- Démarrage d'une transaction (si besoin et si pas de transaction active)
- Traduction du JPQL en HQL puis SQL par Hibernate (oui cette double étape existe)
- Envoie du SQL
- Traduction du SQL par le SGBDR
- Calcul du plan de requête : éventuellement déjà en cache ou alors calcul d'un nouveau plan usage des indexs quand c'est possible. (Cache mieux utiliser sur Prepared Statement plutôt que l'utilisation de valeurs brutes).
- Exécution du plan de la requête
- Récupération des résultats
- Mapping du résultat de la BDD en ORM + Mise en cache de niveau 1 (transacitonnel) en cas de transaction
- ...Autres opérations SQL plus tard
- COMMIT ou ROLLBACK en cas de transaction
- Libération de la connexion du pool (qui généralement reste maintenue un certain temps afin d'éviter la pénalité de la connexion TCP + Authentification SGBDR)
Quand j'ai parlé des choses sur lesquelles je n'étais pas sur car je n'avais pas compris entièrement comment Hibernate gèraient cela c'était des fonctions plus avancées, Par exemple :
- Gestion du cache de second niveau en Hibernate
- Gestion des cascades pour les mises à jours (merge sur plusieurs niveaux)
- ...
Ces éléments là peuvent être gérés avec de l'Hibernate, sauf que c'est déjà un autre niveau de connaissance de la technologie et qu'au moment où j'avais regardé, je n'étais pas entièrement confiant sur le sujet ni même sur le fait d'en avoir vraiment besoin.
Ce que tu dis sur le fait que des développeurs n'ai absolument aucune idée de ce que ce passe sous le capot n'est pas sans raison, mais j'ai bien peur que tu as sauté un peu trop vite sur mon post.
Partager