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.
Dans un contexte où les architectures microservice, le cloud et les systèmes distribués sont devenus la norme, les API (Application Programming Interfaces) jouent un rôle central dans la communication entre les applications et les services. Elles facilitent les échanges de données, l'intégration de fonctionnalités et la scalabilité des infrastructures. Cependant, cette exposition accrue des API ouvre la voie à des vulnérabilités de sécurité majeures, qui peuvent être exploitées pour compromettre des systèmes critiques, voler des données ou perturber des services.
Depuis quelques années, les solutions de monitoring des applications ont évolué pour devenir des solutions d’observabilité, avec la promesse d’avoir une vision unifiée de la performance et du bon fonctionnement des applications...
Découvrez la planche #8 !