J'ai dans ma cartographie une association à une collection très chargée (lazy = "false" fetch = "subselect"). Comment puis-je désactiver cela par programmation avec Hibernate lorsque je fais une requête?Comment pouvez-vous désactiver par programmation le chargement hâtif avec Hibernate?
Répondre
En fait, c'est censé être l'inverse. Vous le désactivez dans le mapping, et l'activez sur des cas d'utilisation spécifiques avec un "fetch" dans la requête.
C'est ainsi que l'équipe Hibernate le voit. Dans Hibernate, il n'y a aucun moyen de créer une requête qui spécifie "no-fetch" pour une propriété ...
J'ai eu une situation qui, pour des raisons historiques, s'est avérée très ardue entre plusieurs dépendances un-à-plusieurs. Au fil des ans, de nombreux endroits en dépendaient, il était donc difficile de l'éteindre. Cependant, dans certains cas, le fetch impatient était gênant: pour chaque plus grande sélection sur la table, il produirait 100s de petites sous-requêtes pour chacune des collections de chacun des objets. J'ai trouvé un moyen de contourner cela, ne pas vraiment surcharger le fetch désireux, mais pour moi tout aussi utile: il suffit de créer une seule requête qui fait tous les sous-ensembles à la fois. Cela va faire une requête physique à la base de données, au lieu d'avoir hibernate marcher le graphique de dépendance et engendrer 100s de requêtes.
Je remplacé
Query q = session.createQuery("from Customer c");
par
Query q = session.createQuery("from Customer c " +
"left join fetch c.vats v " +
"left join fetch v.klMemos bk " +
"left join fetch bk.ferryKlMemos");
1 client a de nombreux numéros de TVA, le numéro 1 de la TVA a beaucoup klmemos et ainsi de suite. L'ancienne situation ne récupérait d'abord que les clients et Hibernate commençait alors à récupérer chacune des collections dépendantes une par une. Le second formulaire chargera tout dans une requête native, et Hibernate trouvera tout ce dont il a besoin pour remplir les collections désirées dans le cache d'objets. J'espère que ça aide quelqu'un. Note: Je pense toujours que vous devriez essayer d'éviter les fetchs impatients ;-)
C'est ce que je pensais aussi bien. Je tentais juste ma chance s'il y avait une telle façon de le faire. Merci –
Vous êtes les bienvenus. Y a-t-il autre chose dont vous avez besoin pour répondre à votre question? Je veux accepter la réponse. – KLE