web-dev-qa-db-fra.com

différence entre FetchMode et FetchType

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

25
jayendra bhatt

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.

28
kamil

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.

23
Vishal Zanzrukia