[JAVA] Unterschiede zwischen Fetch Type LAZY und EAGER im Ruhezustand

Informationen zum Abruftyp

Wenn Sie eine Beziehung zu Hibernate ausdrücken, fügen Sie unten eine Anmerkung wie @OneToMany hinzu.

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<>();
}

Beiträge werden mit @OneToMany kommentiert. Sie können beim Abrufen dieses Arguments entweder FetchType.EAGER oder FetchType.LAZY angeben. Übrigens, wenn nicht angegeben, ist es standardmäßig LAZY. Was ist der Unterschied zwischen den beiden?

Unterschied zwischen LAZY und EAGER

Im Fall von LAZY werden Posts nicht geladen, wenn die Benutzerinstanz von Hibernate aufgerufen wird. Mit anderen Worten, user.getPosts () ist Null. Andererseits wird im Fall von EAGER das Objekt mit der Beziehung auch gelesen, wenn die Instanz aufgerufen wird, sodass user.getPosts () nicht null ist.

Jede Funktion

LAZY: Sie müssen vorsichtig mit Null sein, aber Sie können den Speicher effizient nutzen. EAGER: Nicht null, aber schwere Last.

Richtig verwenden

Die Standardeinstellung LAZY wird für Spring Boot empfohlen. Im vorherigen Beispiel ist es möglich, dass Beiträge nur angezeigt werden, wenn sich der Benutzer anmeldet. Daher ist es vorzuziehen, eine separate Repository-Klasse vorzubereiten und die Lesebedingungen anzugeben.

Fazit

LAZY wird grundsätzlich empfohlen, aber manchmal ist es nützlich, EAGER zu verwenden, um NullPointerExceptions-Fehler zu vermeiden.

Verweise

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

Recommended Posts

Unterschiede zwischen Fetch Type LAZY und EAGER im Ruhezustand
[Verständnis] Unterschied zwischen Hash und Array in Ruby
Unterschiede zwischen IndexOutOfBoundsException und ArrayIndexOutOfBoundsException
Unterschiede zwischen Namespace, Modul, Bereich und wie beim Rails-Routing
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
Unterschiede zwischen "Anfänger" Java und Kotlin
Unterschied zwischen primitivem Typ und Referenztyp
Unterschiede zwischen Java und .NET Framework
Unterschied zwischen final und Immutable in Java
Unterschied zwischen Vorwort und Postfix von Operatoren
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Grundlegender CRUD-Vergleich zwischen Mybatis und Hibernate
Unterschied zwischen getText () und getAttribute () von Selen
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Unterschied zwischen EMPTY_ELEMENTDATA und DEFAULTCAPACITY_EMPTY_ELEMENTDATA in ArrayList
Unterschied zwischen Ruby-Zeichenketten und Symbolen [Anfänger]
Unterschied zwischen int und Integer in Java
[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
Organisieren Sie den Unterschied im Schreibkomfort zwischen dem Java-Lambda-Ausdruck und dem Kotlin-Lambda-Ausdruck.
Unterschiede zwischen Spring Initializr Verpackung JAR und WAR
Unterschied zwischen next () und nextLine () in Java Scanner
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Fassen Sie die Unterschiede zwischen C # - und Java-Schrift zusammen
Unterscheiden Sie in Java zwischen positiven und negativen Zahlen