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.
Sass est un préprocesseur CSS, très pratique ! Cependant, il nécessite un éditeur comme Sublime Text pour permettre de s’y retrouver facilement. On vous explique tout dans cet article.
Votre code fonctionne, il est beau, optimisé (n’est-ce pas), prêt à être déployé en production aux yeux de tous. Il ne reste plus qu’à l’héberger. Seulement… entre l'hébergement On-Premise et le Cloud, entre dédié et mutualisé, la décision peut sembler complexe. Dans cet article, nous allons examiner ces différentes options afin de vous guider vers le choix le plus adapté à vos besoins. Bonne lecture !
JSF le problème de l'autocomplete off