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.
Problème de perte de connexion avec Mysql avec l’utilisation de HAPROXY
Les audits de code source font partie de notre expertise. À force de relire des codes, nous voyons des erreurs qui reviennent invariablement, impactant la performance, la sécurité et la qualité des applications. Voici les 5 principales !
Parce que réussir son chiffrage, c’est à la fois s’assurer de payer son projet au prix juste et faire en sorte qu’il soit réalisé dans de bonnes conditions. On vous explique tout dans cet article