quelle est la différence en spécifiant lazy = "true"
et en utilisant fetch = "select" or "join"
? lequel est préféré à l'autre?
salut jayendra
Disons que nous avons des entités comme celle-ci:
@Entity
@Table
public class Parent {
@Id
private Long id;
@OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
private List<Child> child;
//getter setters
}
@Entity
@Table
public class Child {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
//getter setter
}
Dans l'exemple ci-dessus, lors de l'obtention de l'entité Parent
, hibernate chargera automatiquement toutes les entités child
avec impatience en utilisant join. D'un autre côté, lorsque vous récupérez Child
, l'entité Parent
ne sera pas sélectionnée sauf si vous l'appelez explicitement dans votre code child.getParent()
.
FetchType (Lazy/Eager) indique si nous voulons que l'entité soit chargée avec impatience ou paresseuse, lorsqu'il y a appel de code.
FetchMode (Select/Join) indique si nous voulons que notre droit soit chargé avec une sélection supplémentaire ou dans une requête avec jointure ou sous-sélection.
FetchMode: Il définit how
hibernate (en utilisant la stratégie, par exemple Join, SubQuery etc.) qui récupérera les données de la base de données.
FetchType: Il définit whether
hibernate va récupérer les données ou non.
NOTE : FetchMode
n'est applicable que lorsque FetchType = EAGER
pendant l'annotation.