Dans cet article


Offres d'emploi

Tags

Lazy Loading @Lob Hibernate

Lazy Loading @Lob Hibernate

LazyLoading @Lob Hibernate 4  / JPA2

Dans la majorité des cas, posséder des blob dans une entity ne pose pas de problème majeur.

Malheureusement, il existe des cas ou mapper ces champs peut induire une sérieuse perte de performance, spécialement lors de création de requêtes de recherche volumineuses.

Exemple de mapping d’un blog avec JPA2:

/** The documentimp. */
@Column(name="DOCUMENTIMP")
@Lob() 
private byte[] documentimp;

 

Si vous exécuter une requête Critéria avec ce mapping, hibernate ramènera systématiquement le contenu du document ce qui n’est dans la majorité des cas pas nécessaire.

Il existe deux solutions pour contourner ce problème:

Créer un @OneToOne

Détacher l’objet @lob dans une entity séparée et créer une relation @OneToOne avec un FetchType.LAZY. Cette solution fonctionne correctement mais nécessite de changer le mapping.

Doubler le mapping

Une autre solution plus simple et efficace peut-être mise en place. Il suffit juste de créer une deuxième entité sans le champ blob mappé. Utilisé cette entité pour faire des recherches avec de grosses volumétries et n’utiliser l’autre entity (avec le @Lob) que dans le cas ou vous avez réellement besoin du blob.

Environnement de test:

  1. JBoss 7.1
  2. Hibernate 4
  3. Oracle 11gR2

L'équipe AXOPEN

Voir aussi les articles suivants

Jboss 7 : Industrialisation part 1 – Cluster

Jboss 7 : Industrialisation part 1 – Cluster

Le 28/12/2012 par Pierre Liseron

Automatisation de l’installation d’un node JBOSS 7 dans un cluster Ajout du node Par exemple l’ajout d’un node sur un cluster peut être rapidement réalisé avec un script: Voici un script qui permet de télécharger directement un nouveau JBOSS 7.1, d’installer et de configurer l’instance pour se connecter au master avec son nom et son mot de passe. Les sed sont ici présent pour correctement paramètrer l’instance sans aller modifier le fichier host.
Lire l'article

Sécuriser votre application web contre les attaques dans un cloud
Suite à de nombreuses attaques sur les applications web, voici résumé dans cet article des pistes possibles pour s’en protéger.   Présentation de l’architecture typique d’une application web L’architecture typique d’une application web est la suivante: Un front Apache (ou IIS) qui joue le rôle de point d’entrée unique de l’application. Généralement, il fait office de proxy vers votre application web. Et souvent même de load balancer. L’application étant généralement développée en JAVA (ou .
Lire l'article

Oracle : impact de l’obsolescence du type LONG sur le modèle de données Planisware
Description Le type de données LONG est un type obsolète pour les bases de données ORACLE. Il est encore présent dans les versions récentes d’Oracle pour des raisons évidentes de compatibilité mais il n’évolue plus et est destiné à disparaître à terme. Il est remplacé progressivement par les types CLOB et NCLOB. Cet article présente les impacts de l’obsolescence de ce type LONG sur le produit Planisware ainsi que des stratégies possibles de migration.
Lire l'article