Heim >Java >javaLernprogramm >Warum funktioniert mein JPA @OneToOne Lazy Loading nicht?

Warum funktioniert mein JPA @OneToOne Lazy Loading nicht?

Barbara Streisand
Barbara StreisandOriginal
2024-12-29 13:53:13917Durchsuche

Why Isn't My JPA @OneToOne Lazy Loading Working?

Behebung von Lazy-Loading-Frustrationen in JPA OneToOne-Beziehungen

Diese Abfrage betrifft eine Anwendung, deren Leistung aufgrund einer übermäßigen Anzahl von Verknüpfungen im Ruhezustand langsam ist Abfrage. Trotz der Annotation von @OneToOne und @ManyToOne mit FetchType.LAZY scheint Lazy Loading keine Wirkung zu zeigen.

Ursache des Problems

Das Problem liegt in der Tiefe Hierarchie der OneToOne- und ManyToOne-Beziehungen zwischen Entitäten. Während ManyToMany- und OneToMany-Beziehungen leicht verzögert werden können, gilt das Gleiche nicht für bestimmte Arten von OneToOne-Assoziationen.

Lösungen

A. Nullable OneToOne-Beziehungen (unbeschränkt)

Unbeschränkte Eins-zu-Eins-Beziehungen, bei denen die zugehörige Eigenschaft null sein kann, können ohne Bytecode-Instrumentierung nicht als Proxy verwendet werden. Dies liegt daran, dass die Eigentümerentität wissen muss, ob die Zuordnung einen Proxy oder Null enthält, was nicht allein anhand der Spalten der Basistabelle bestimmt werden kann.

B. Nicht nullbare Eins-zu-Eins-Beziehungen

Für nicht nullbare Eins-zu-Eins-Zuordnungen stehen die folgenden Optionen zur Verfügung:

  • Geben Sie die Zuordnung als obligatorisch und verzögert an: @OneToOne (optional = false, fetch = FetchType.LAZY)
  • Ordnen Sie die Assoziation als verbundene Beziehung zu, Hinzufügen einer Fremdschlüsselspalte zur Eigentümertabelle:

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="other_entity_fk")
    public OtherEntity getOther()

C. ManyToOne-Beziehungen

ManyToOne-Beziehungen können ohne Einschränkungen verzögert werden: @ManyToOne(fetch=FetchType.LAZY). Stellen Sie jedoch sicher, dass diese Annotation nicht in der Abfrage selbst überschrieben wird.

Überlegungen

Wenn das eifrige Laden von OneToOne-Zuordnungen zu erheblichen Leistungsproblemen führt, liegen umfassendere Designfehler vor Das Datenmodell sollte untersucht werden. Als letztes Mittel kann eine Bytecode-Instrumentierung erforderlich sein.

Implementierungshinweise

  • Die Datei persistence.xml wird in diesem Fall nicht zum Definieren von Beziehungen oder Konfigurationsdetails verwendet .
  • Post-factum-Untersuchungen erfordern die Weitergabe spezifischer Details, wie z. B. Entitätsklassen, Abfragen und daraus resultierender SQL, um eine genauere Aussage zu treffen Analyse.

Das obige ist der detaillierte Inhalt vonWarum funktioniert mein JPA @OneToOne Lazy Loading nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn