Suche…


Verwenden Sie keinen EAGER-Abruftyp

Der Ruhezustand kann zwei Arten des Abrufs verwenden, wenn Sie die Beziehung zwischen zwei Entitäten EAGER : EAGER und LAZY .

Im Allgemeinen ist der EAGER keine gute Idee, da er JPA EAGER , die Daten immer abzurufen, selbst wenn diese Daten nicht erforderlich sind.

Beispiel: Wenn Sie eine Person und die Beziehung zu Address wie Address lautet:

@Entity
public class Person {

  @OneToMany(mappedBy="address", fetch=FetchType.EAGER)
  private List<Address> addresses;

}

Jedes Mal, wenn Sie eine Person abfragen, wird auch die Liste der Address dieser Person zurückgegeben.

Anstatt also Ihre Entität zuzuordnen mit:

@ManyToMany(mappedBy="address", fetch=FetchType.EAGER)

Benutzen:

@ManyToMany(mappedBy="address", fetch=FetchType.LAZY)

Eine andere Sache, die zu beachten ist, ist die Beziehung @OneToOne und @ManyToOne . Beide sind standardmäßig EAGER. Wenn Sie sich also Gedanken über die Leistung Ihrer Anwendung machen, müssen Sie den Abruf für diese Art von Beziehung festlegen:

@ManyToOne(fetch=FetchType.LAZY)

Und:

@OneToOne(fetch=FetchType.LAZY)

Verwenden Sie Komposition statt Vererbung

Der Winterschlaf hat einige Vererbungsstrategien. Der JOINED Vererbungstyp führt einen JOIN zwischen der JOINED Entität und der übergeordneten Entität durch.

Das Problem bei diesem Ansatz besteht darin, dass der Ruhezustand immer die Daten aller beteiligten Tabellen in die Vererbung einbringt.

Wenn Sie beispielsweise die Entitäten Bicycle und MountainBike mit dem Vererbungstyp JOINED verwenden:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Bicycle {

}

Und:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class MountainBike extends Bicycle {

}

Jede JPQL-Abfrage, die auf MountainBike trifft, liefert die Bicycle und erstellt eine SQL-Abfrage wie:

select mb.*, b.* from MountainBike mb JOIN Bicycle b ON b.id = mb.id WHERE ...

Wenn Sie ein anderes übergeordnetes Bicycle für das Bicycle (z. B. " Transport ), werden bei dieser obigen Abfrage auch die Daten dieses übergeordneten Elements abgerufen und ein zusätzlicher JOIN durchgeführt.

Wie Sie sehen, ist dies auch eine Art EAGER Mapping. Sie haben nicht die Wahl, nur die Daten der MountainBike Tabelle mit dieser Vererbungsstrategie mitzubringen.

Das Beste für die Leistung ist Komposition statt Vererbung.

Um dies zu erreichen, können Sie die MountainBike Entität einem Feldfahrrad bicycle :

@Entity
public class MountainBike {

    @OneToOne(fetchType = FetchType.LAZY)
    private Bicycle bicycle;

}

Und Bicycle :

@Entity
public class Bicycle {

}

Jede Abfrage bringt jetzt standardmäßig nur die MountainBike Daten mit.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow