Rumah >Java >javaTutorial >Mengapa JPA Saya @OneToOne Lazy Loading Tidak Berfungsi?

Mengapa JPA Saya @OneToOne Lazy Loading Tidak Berfungsi?

Barbara Streisand
Barbara Streisandasal
2024-12-29 13:53:13950semak imbas

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

Mengatasi Kekecewaan Lazy Loading dalam JPA OneToOne Relations

Pertanyaan ini melibatkan aplikasi yang mengalami prestasi perlahan disebabkan bilangan gabungan yang berlebihan dalam Hibernate pertanyaan. Walaupun menganotasi @OneToOne dan @ManyToOne dengan FetchType.LAZY, pemuatan malas nampaknya tidak berkuat kuasa.

Akar Isu

Isunya terletak di bahagian dalam hierarki perhubungan OneToOne dan ManyToOne antara entiti. Walaupun hubungan ManyToMany dan OneToMany boleh menjadi malas dengan mudah, perkara yang sama tidak berlaku untuk jenis persatuan OneToOne tertentu.

Penyelesaian

A. Perhubungan OneToOne Nullable (Tanpa Kekangan)

Perkaitan satu sama satu tanpa kekangan, di mana sifat yang berkaitan boleh menjadi batal, tidak boleh diproksi tanpa instrumentasi bytecode. Ini kerana entiti pemilik perlu mengetahui sama ada persatuan itu mengandungi proksi atau batal, yang tidak boleh ditentukan semata-mata daripada lajur jadual asas.

B. Perhubungan OneToOne Tidak Boleh Dibatalkan

Untuk persatuan satu sama satu yang tidak boleh dibatalkan, pilihan berikut tersedia:

  • Tentukan persatuan sebagai wajib dan malas: @OneToOne (pilihan = palsu, ambil = FetchType.LAZY)
  • Peta perkaitan sebagai perhubungan bercantum, menambah lajur kunci asing pada jadual pemilik:

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

C . Perhubungan ManyToOne

Perhubungan ManyToOne boleh dibuat malas tanpa sekatan: @ManyToOne(fetch=FetchType.LAZY). Walau bagaimanapun, pastikan anotasi ini tidak ditimpa dalam pertanyaan itu sendiri.

Pertimbangan

Jika pemuatan berterusan persatuan OneToOne menyebabkan isu prestasi yang ketara, kecacatan reka bentuk yang lebih luas dalam model data perlu disiasat. Instrumentasi bytecode mungkin diperlukan sebagai pilihan terakhir.

Nota Pelaksanaan

  • Fail persistence.xml tidak digunakan untuk mentakrifkan perhubungan atau butiran konfigurasi dalam kes ini .
  • Penyiasatan post-factum memerlukan perkongsian butiran khusus, seperti kelas entiti, pertanyaan dan SQL yang terhasil, untuk analisis yang lebih tepat.

Atas ialah kandungan terperinci Mengapa JPA Saya @OneToOne Lazy Loading Tidak Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn