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.
Le développement applicatif est un art complexe, en particulier lorsqu'il s'agit de traiter des domaines métiers spécifiques et techniques. Heureusement, certaines méthodes éprouvées peuvent aider à relever ce défi. Parmi elles, le Domain-Driven Design (DDD) se distingue particulièrement. Cette approche propose un cadre clair et efficace pour aligner la conception logicielle avec les besoins métier. Dans cet article, nous allons explorer les concepts clés du DDD et comprendre comment ils peuvent transformer la manière dont vous concevez des logiciels et des applications web. Bonne lecture !
Frameworks : le comparatif entre React et Angular
Il y a quelques jours, je vous parlais de cette nouvelle application : [Gitlab Explorer][1], nouvel outil indispensable pour les utilisateurs de Gitlab. Face à vos retours plus que positifs sur l’outil, j’entame une série de quelques articles dédiés