• › Connexion
  • Blog RIA
Section separator

Catégories

  • Annonces
  • Concepts et Usages
  • Événements
  • Général
  • Notes Techniques
  • Références
Adobe EMEA Silver Solution Partner Section separator

Abonnement

  • RSS Articles Articles (RSS)
  • RSS Articles Commentaires (RSS)
  • RSS mail Articles (Email)
  • Populaires
  • Récents
  • Commentaires
  • La courbe de deuil du Flexeur (vu 1 104 fois)
  • La courbe de deuil du Flexeur
  • Sortie de Kalileo 2.4
  • TestRail : on l’a testé, on l’a adopté !
  • DB2 à la page dans Hibernate 4
  • Parsley fait peau neuve
  • Sphaxslayer dans Contest logo Apache Flex : Nos propositions
  • Anonyme dans Contest logo Apache Flex : Nos propositions
  • Pbergsma dans Contest logo Apache Flex : Nos propositions
  • Liens informatiques du mois – janvier 2012 | Gestion de projet et développement informatique dans Flex est mort, vive Flex !
  • Florian Fesseler dans Flexmojos : Quick compile mode

Auteurs

  • Alexis Kartmann (12)
  • Antoine Gehl (4)
  • Benoit Kogut-Kubiak (2)
  • Cyril Daloz (10)
  • Daniel Pesic (6)
  • Delphine Estebanez (3)
  • Fadi Mansour (3)
  • Florent Hirsch (1)
  • Florian Fesseler (13)
  • Gaétane Stavaux (3)
  • Guillaume Mignard (4)
  • Java Team (1)
  • Julien Revel (22)
  • Mahmoud Ramadan (1)
  • Matthieu Jobert (1)
  • Morgan Bruneau (1)
  • Stéphane Guyot (1)
  • Stéphane Koëth (2)
  • Thomas de Verdière (1)
  • Yann Graufogel (3)
Section separator

Tags

Adobe Adobe Business Exchange Adobe MAX AIR AMF AS3 Cairngorm Corporate Flash Player Flex Framework iPhone JAVA Kap Inspect Kap Lab LCDS LiveCycle Mobile MVC PureMVC QA Reporting RIA RTMP Spark
Section separator

Archives

  • mai 2013 (1)
  • avril 2012 (1)
  • février 2012 (3)
  • janvier 2012 (4)
  • décembre 2011 (1)
  • novembre 2011 (2)
  • octobre 2011 (4)
  • août 2011 (2)
  • juillet 2011 (5)
  • juin 2011 (4)
  • mai 2011 (1)
  • mars 2011 (1)
  • janvier 2011 (1)
  • décembre 2010 (1)
  • novembre 2010 (3)
  • juin 2010 (1)
  • mars 2010 (1)
  • février 2010 (1)
  • décembre 2009 (2)
  • novembre 2009 (1)
  • octobre 2009 (3)
  • septembre 2009 (1)
  • août 2009 (1)
  • avril 2009 (2)
  • février 2009 (1)
  • janvier 2009 (3)
  • décembre 2008 (4)
  • novembre 2008 (2)
  • octobre 2008 (2)
  • septembre 2008 (2)
  • août 2008 (1)
  • juin 2008 (1)
  • avril 2008 (4)
  • mars 2008 (3)
  • février 2008 (2)
  • janvier 2008 (1)
  • décembre 2007 (3)
  • novembre 2007 (1)
  • septembre 2007 (1)
  • juillet 2007 (1)
  • juin 2007 (1)
  • mai 2007 (3)
  • avril 2007 (8)
  • mars 2007 (2)
  • février 2007 (1)

Marque-pages

  • Adobe Blogs
  • Adobe Developer Connection
  • Adobe Evangelists
  • Adobe Flex Tutorials (FR)
  • Code moi un mouton
Section separator

Kap IT

  • Site Web
  • Blog RIA
  • Kap Lab - Composants Flex
  • GitHub Kap IT

Blog RIA

Veille, Recherche et Développement RIA

DB2 à la page dans Hibernate 4

Par Thomas de VerdièregravatarFermerAuteur : Thomas de Verdière Email : tdeverdiere@kapit.fr
Site :
A propos : Voir les autres billets de l'auteur (1)
, publié le 23 février 2012

Bonjour à tous,

Le blog de Kap IT est ouvert à la partie « serveur ». Cette partie les développeurs Flex n’osent pas y aller, ils se disent qu’il y a des toiles d’araignées, que tout est un peu vétuste, et qu’en soulevant un tapis ils vont trouver une base de données VSAM. En fait ça, ils ne se le disent pas car ils ne savent ce que c’est (celui qui trouve ce que c’est, gagne… mon estime). Et bien il est grand temps de dépoussiérer tout ça. Tout au moins de montrer que les fondations sont solides, robustes mais aussi innovantes.

Pour bien commencer, je vais vous parler d’une des briques principales d’ORM (Object Relational Mapping) entre une base de données relationnelle et des objets Java : Hibernate 4.0.1.

La plupart des clients ou grands comptes disposent de base de données DB2. Pour ceux qui connaissent, ils savent que l’intégration avec Hibernate est tricky. Et que bien souvent on est obligé de passer par du JDBC pour écrire nous même les requêtes. C’était vrai avec Hibernate 3. Et… c’est encore vrai avec Hibernate 4, mais, mais, …, voici quelques améliorations.

L’avantage d’Hibernate 4 est que la classe DB2Dialect a été un peu réécrite. Et notamment la fonction pour la pagination, il s’agit de la méthode : org.hibernate.dialect.DB2Dialect.getLimitString(String, int, int).

Par exemple,  si je veux afficher les enregistrements de la table des utilisateurs depuis l’index 100 et avoir en retour 200 enregistrements maximum, j’écris le code suivant :

Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult(100);
criteria.setMaxResults(200);

Le paramètre FirstResult représente l’index de début et MaxResults le maximum d’enregistrement.

Hibernate 3.6 imbrique 2 requêtes. Il sélectionne d’abord l’intégralité des lignes de la table USER dans une table TEMP, et numérote chaque ligne (fonction rownumber()), puis il restreint le nombre de résultats avec la clause  where rownumber_ between 101 and 300

SELECT * FROM (
	SELECT rownumber() OVER() AS rownumber_,
		this_.ID AS ID26_0_,
		...
		FROM USER this_
		ORDER BY this_.ID ASC ) AS temp_  WHERE rownumber_ BETWEEN 101 AND 300

Si l’index de début (FirstResult) est = 0, alors il restreindra les résultats avec la clause where rownumber_ <= MaxResult

Hibernate 4 tire avantage de l’instruction DB2 fetch first x rows only. Au lieu de sélectionner la totalité des résultats de la table, il sélectionne seulement les éléments qui vont lui servir pour la clause de restriction soit : FirstResult+MaxResult premiers éléments (ici 100 + 200 = 300), en utilisant la clause fetch first 300 rows only :

SELECT * FROM (
           SELECT inner2_.*, rownumber() OVER(ORDER BY ORDER OF inner2_) AS rownumber_
           FROM (
              SELECT this_.ID AS ID26_0_,
              ...
              FROM USER this_
              ORDER BY this_.ID ASC
              fetch FIRST 300 ROWS ONLY
           ) AS inner2_
      ) AS inner1_
      WHERE rownumber_ &gt; 100 ORDER BY rownumber_

Par ailleurs si le paramètre FirstResult est = 0, il ne crée pas de requête de numérotation et utilise directement l’instruction fetch first 200 rows only.

En terme de comparatif, sur des requêtes complexes (10aines de jointures), avec 100 enregistrements je note des gains de 350 ms par requête (soit 20% plus rapide) !

Pas mal Hibernate 4 non ? Merci Gavin King.

Bon il n’y a toujours pas moyen de rajouter simplement l’instruction WITH UR (UNCOMMITED READ). Mais on peut utiliser simplement la Transaction API de Spring .

Vous avez utilisé Hibernate 4, quels sont vos retours d’expérience ?

Catégories: Notes Techniques
Mots-clefs :DB2, Hibernate 4, JAVA, Spring

Le commentaires sont fermés.

Article précédent
Article suivant
 
Haut de page

Copyright © 2009 Kap IT - Blog RIA - Kap Lab

Motorisé par Wordpress - Thème avec YAML par Kap IT