2016-12-15 4 views
0

Ich habe ein Elternteil wie folgt aus:JPA - Nur Eltern bekommen, keine Kinder

@Entity 
@Table(name="parent") 
public class Parent { 

    private List<Child> childs; 
    private List<AnotherChild> anotherChilds; 

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) 
    public List<Child> getChilds() { 
     return childs; 
    } 

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) 
    public List<AnotherChild> getAntoherChilds() { 
     return anotherChilds; 
    } 

    //Getters and Setters ommited 
} 

und zwei Kinder mögen dieses

@Entity 
@Table(name="child") 
public class Child { 

    private Parent parent; 

    @ManyToOne 
    @JoinColumn(name = "column_name") 
    public Parent getParent() { 
     return patern; 
    } 
} 

@Entity 
@Table(name="another_child") 
public class AnotherChild { 

    private Parent parent; 

    @ManyToOne 
    @JoinColumn(name = "column_name") 
    public Parent getParent() { 
     return patern; 
    } 
} 

ich eine benannte Abfrage haben, die alle Eltern bekommt, aber das lädt auch alle Kinder? Wie kann ich die Kinder zum automatischen Laden anhalten?

Danke.

+0

Bitte senden Sie Ihre Abfrage, die das übergeordnete Element abruft. –

+0

@AbdullahWasi es ist nur die Standard-Abfrage findAll, und heißt Form JAX-RS als eine benannte Abfrage – iqueqiorio

+0

Lazy Loading ist der Standard, also wenn sie geladen werden, dann ist es Ihr Code, dass es es tut - also die relevanten Code. –

Antwort

0

Lazy loading ist ein Entwurfsmuster, das häufig in der Computerprogrammierung verwendet wird, um die Initialisierung eines Objekts auf den Zeitpunkt zu verzögern, an dem es benötigt wird. Es kann zur Effizienz des Programmbetriebs beitragen, wenn es richtig und angemessen genutzt wird. Das Gegenteil von Lazy Loading ist eifrig laden. der Verwendung von Hibernate Mappings vs Anmerkungen

Wie Lazy Loading-in Hibernate

Bevor weiter zu aktivieren, ist es wichtig, von verzögertes Laden im Fall das Standardverhalten rekapitulieren. Das Standardverhalten besteht darin, 'Eigenschaftenwerte eifrig' zu laden und 'Sammlungen träge' zu laden. Im Gegensatz zu dem, was Sie sich vielleicht merken, wenn Sie verwendet haben, plain Hibernate 2 (Mapping-Dateien) zuvor, wo alle Referenzen (einschließlich Sammlungen) standardmäßig geladen werden. Beachten Sie außerdem, dass @ OneToMany- und @ ManyToMany-Verknüpfungen standardmäßig auf LAZY geladen werden. und @OneToOne und @ManyToOne werden standardmäßig auf EAGER geladen. Dies ist wichtig zu erinnern, um in Zukunft keine Fallstricke zu vermeiden. Um das faule Laden von explizit zu aktivieren, müssen Sie "fetch = FetchType.LAZY" in einer Assoziation verwenden, die Sie langsam laden möchten, wenn Sie Hibernate Annotationen verwenden. Eine Beispielverwendung sieht folgendermaßen aus: @OneToMany ( mappedBy = "Kategorie", fetch = FetchType.LAZY) private Set-Produkte; Ein weiteres parallel zu "FetchType.LAZY" liegendes Attribut ist "FetchType.EAGER" , das genau entgegengesetzt zu LAZY ist, d. H. Es lädt die Assoziationseinheit als , wenn die Entität zum ersten Mal abgerufen wird. Wie Lazy Loading Works im Ruhezustand Die einfachste Möglichkeit, wie Hibernate Lazy Load Verhalten auf Ihre Entitäten und Verknüpfungen anwenden kann, ist die Bereitstellung einer Proxy Implementierung von ihnen. Hibernate fängt Aufrufe an die Entität ab, indem einen Proxy ersetzt, der von der Klasse der Entität abgeleitet wird. Wenn die angeforderte Information fehlt, wird sie aus der Datenbank geladen, bevor die Kontrolle an die Implementierung der übergeordneten Entität übergeben wird. Bitte beachten Sie, dass wenn die Zuordnung als eine Sammlungsklasse dargestellt wird, dann ein Wrapper (im Wesentlichen ein Proxy für die Sammlung, anstatt für die Entitäten, die es enthält) erstellt und ersetzt die ursprüngliche Sammlung. Wenn Sie auf diesen Sammlungs-Proxy zugreifen, ist das, was Sie in der zurückgegebenen Proxy-Sammlung erhalten, keine Proxy-Entitäten. eher sind sie tatsächliche Entitäten. Sie müssen nicht viel Druck auf dieses Konzept zu verstehen, weil auf Laufzeit es kaum zählt.

Verwandte Themen