le lazy=true
attribut est activer le chargement différé des collections parent et enfant et même chose fetch="select"
attribut. Y a-t-il une différence entre lazy="true"
et fetch="select"
en hibernation ?.
Réponses:
21 pour la réponse № 1Oui.
le lazy
attribut dit hiberner quand chercher les enfants.
le fetch
attribut dit hiberner Comment chercher les enfants.
Quand tu dis
L'attribut lazy = true permet le chargement paresseux du parent et de l'enfant. collections et 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 réalité, de la documentation
Sélectionnez chercher: un second SELECT est utilisé pour récupérer le fichier associé. entité ou collection. Sauf si vous désactivez explicitement la récupération paresseuse par en spécifiant lazy = "false", cette seconde sélection ne sera exécutée que lorsque vous accédez à l'association.
13 pour la réponse № 2
Quand on dit fetch="select"
, il lancera toujours des requêtes distinctes pour récupérer les objets d'association, même s'il est lazy ="false"
.
Mais quand on dit 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 au premier accès à l'association. Nous pouvons le faire en disant list().size()
.
Quand on dit fetch="join"
il lancera toujours une requête unique pour extraire les objets d'association de la base de données.
1 pour la réponse № 3
Pour résoudre n + 1, sélectionnez le problème pour n requêtes.(relation parent-enfant) en veille prolongée, nous utilisons fetch = "join" au lieu de fetch = "select". Le paramètre différé décide de charger ou non les objets enfants lors du chargement de l'objet parent. Ce fichier de mappage d'hibernation respectif de la classe parente doit être paramétré.Lazy = true (signifie ne pas charger l'enfant) Par défaut, le chargement différé des objets enfants est true. .