[JAVA] Différences entre Fetch Type LAZY et EAGER dans Hibernate

À propos du type de récupération

Lorsque vous exprimez une relation avec Hibernate, ajoutez une annotation telle que @OneToMany ci-dessous.

User.java


@Getter
@Setter
@NoArgsConstructor
@Entity
public class User {
    public User(Long id, String name, Integer age, Set<Post> posts){
        this.id = id;
        this.name = name;
        this.age = age;
        this.posts = posts;
    }
    private Long id;
    private String name;
    private Integer age;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user" )
    private Set<Post> posts = new HashSet<>();
}

Les messages sont annotés avec @OneToMany. Vous pouvez spécifier FetchType.EAGER ou FetchType.LAZY dans la récupération de cet argument. Au fait, s'il n'est pas spécifié, il sera LAZY par défaut. Alors, quelle est la différence entre les deux?

Différence entre LAZY et EAGER

Dans le cas de LAZY, les publications ne seront pas chargées lorsque l'instance User est appelée par Hibernate. En d'autres termes, user.getPosts () sera Null. D'autre part, dans le cas d'EAGER, l'objet avec la relation est également lu lorsque l'instance est appelée, donc user.getPosts () n'est pas nul.

Chaque fonctionnalité

LAZY: Vous devez faire attention à Null, mais vous pouvez utiliser la mémoire efficacement. EAGER: Pas nul, mais charge lourde.

Utiliser correctement

La valeur LAZY par défaut est recommandée pour Spring Boot. Dans l'exemple précédent, il est possible que les messages ne soient affichés que lorsque l'utilisateur se connecte, il semble donc préférable de préparer une classe de référentiel distincte et de spécifier les conditions de lecture.

Conclusion

LAZY est fondamentalement recommandé, mais il est parfois utile d'utiliser EAGER pour éviter les erreurs NullPointerExceptions.

Les références

https://howtoprogramwithjava.com/hibernate-eager-vs-lazy-fetch-type/

Recommended Posts

Différences entre Fetch Type LAZY et EAGER dans Hibernate
[Comprendre] Différence entre le hachage et le tableau dans Ruby
Différences entre IndexOutOfBoundsException et ArrayIndexOutOfBoundsException
Différences entre l'espace de noms, le module, la portée et comme dans le routage Rails
Pensez aux différences entre les fonctions et les méthodes (en Java)
Différences dans la gestion des chaînes entre Java et Perl
Différences entre Java "débutant" et Kotlin
Différence entre le type primitif et le type de référence
Différences entre Java et .NET Framework
Différence entre final et immuable en Java
Différence entre la préface et le suffixe des opérateurs
[Java] Différences entre les variables d'instance et les variables de classe
Comparaison CRUD de base entre Mybatis et Hibernate
Différence entre getText () et getAttribute () de Selenium
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Différence entre EMPTY_ELEMENTDATA et DEFAULTCAPACITY_EMPTY_ELEMENTDATA dans ArrayList
Différence entre les chaînes de caractères et les symboles Ruby [Débutant]
Différence entre int et Integer en Java
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
Organisez la différence de confort d'écriture entre l'expression lambda Java et l'expression lambda Kotlin.
Différences entre Spring Initializr Packaging JAR et WAR
Différence entre next () et nextLine () dans Java Scanner
Différences dans l'écriture des classes Java, C # et Javascript
Résumer les différences entre l'écriture C # et Java
Distinguer les nombres positifs et négatifs en Java