web-dev-qa-db-fra.com

quelle est la différence entre lazy = "true" et fetch = "select" en veille prolongée?

L'attribut lazy=true permet d'activer le chargement différé des collections parent et enfant et du même attribut fetch="select". Existe-t-il une différence entre lazy="true" et fetch="select" en veille prolongée?.

12
user1127214

Oui.

L'attribut lazy indique à hibernate when pour obtenir les enfants.

L'attribut fetch indique à hibernate how d'obtenir les enfants.

Quand tu dis

L'attribut lazy = true permet le chargement paresseux des collections parent et enfant Et de la même chose fetch = "select" attribut

c'est carrément incorrect. La stratégie d’extraction sélective n’EST PAS la même chose que d’arrêter le chargement paresseux. En fait, de la documentation

Sélectionner la récupération: un deuxième SELECT est utilisé pour récupérer l'entité ou la collection Associée. À moins que vous ne désactiviez explicitement la récupération paresseuse en indiquant En spécifiant lazy = "false", cette deuxième sélection ne sera exécutée que lorsque vous accédez à l'association.

21
hvgotcodes

Lorsque nous disons fetch="select", il lancera toujours des requêtes distinctes pour extraire les objets d'association, même s'il s'agit de lazy ="false".

Mais lorsque nous disons lazy ="true", cela signifie qu'il récupérera les objets d'association dans une requête distincte, mais pas au moment du chargement de l'objet, mais lors du premier accès à l'association. Nous pouvons le faire en disant list().size().

Lorsque nous disons fetch="join", une seule requête est toujours déclenchée pour extraire les objets d'association de la base de données.

14
Chiranjit Dutta

Pour résoudre n + 1 problème de sélection pour n requêtes (relation parent-enfant) en veille prolongée, nous utilisons fetch = "join" au lieu de fetch = "select". Le paramètre paresseux décide de charger ou non les objets enfants lors du chargement de l'objet parent. Vous devez définir ce fichier de mappage d'hibernation respectif de la classe parent.Lazy = true (signifie ne pas charger l'enfant) Par défaut, le chargement paresseux des objets enfants est true .

1
sreenivas