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:
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.
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.
Quelques années après avoir créé ce blog, nous nous sommes rendu compte d’une chose : nous ne nous sommes jamais présentés ! Grossière erreur de notre part… Cependant, « vaut mieux tard que jamais », alors on fait un petit rectificatif pour tenter de se r
Le DevOps, c’est quoi et comment se lancer ? On vous donne notre définition du DevOps, nos outils préférés et nos conseils pour réussir un projet en DevOps
Cet article précise l’utilisation de la méthode OJS "print" permettant de lancer l’impression d’un rapport.