Rumah > Java > Bagaimana untuk mendapatkan semula perhubungan entiti terhad menggunakan Spring JPA?

Bagaimana untuk mendapatkan semula perhubungan entiti terhad menggunakan Spring JPA?

王林
Lepaskan: 2024-02-08 22:20:10
ke hadapan
1201 orang telah melayarinya

Apabila menggunakan Spring JPA untuk mendapatkan semula perhubungan entiti, kadangkala kami perlu mengehadkan hasil untuk memenuhi keperluan perniagaan tertentu. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Spring JPA untuk mendapatkan semula perhubungan entiti terhad. Dengan menggunakan anotasi pertanyaan dan kaedah yang disediakan oleh Spring JPA, kami boleh melaksanakan sekatan ke atas perhubungan entiti dengan mudah, dengan itu meningkatkan kecekapan dan ketepatan pertanyaan. Sama ada anda seorang pemula atau pembangun yang berpengalaman, artikel ini akan memberikan anda panduan yang jelas dan contoh praktikal untuk membantu anda memahami dengan lebih baik dan menggunakan keupayaan mendapatkan semula perhubungan entiti Spring JPA.

Kandungan soalan

Ini ialah masalah pengoptimuman tentang perhubungan dan pangkalan data pergi-balik.

tl;dr: Anda mempunyai dua entiti a dan b, yang mempunyai hubungan banyak-ke-banyak. Anda perlu mendapatkan semula tika a dan subset khusus entiti b berkaitannya. Ini adalah bahagian penting, anda tidak mahu mendapatkan semula semua entiti yang berkaitan dengan tika b ini, tetapi hanya subset daripadanya.

Panggilan panjang

Pertimbangkan entiti berikut

public class a {

  @id
  private long id;

  @manytomany
  private list<b> blist;
}
Salin selepas log masuk
public class B {

  @Id
  private Long id;

  @ManyToMany
  private List<A> aList;

  private Boolean somePropertyToUseWhileFiltering;
}
Salin selepas log masuk

Saya cuba mendapatkan semula tika entiti dan subset kejadian b yang berkaitan. Pada pendapat saya, ini boleh dicapai dengan tiga cara

  1. Dapatkan semua entiti b yang berkaitan semasa mendapatkan semula a dan buang entiti yang anda tidak perlukan.

  2. Buat dua panggilan repositori berbeza menggunakan hubungan malas: mula-mula dapatkan tika tanpa tika b yang berkaitan, kemudian dapatkan tika b yang menyatakan penapis dan sekatan yang diperlukan.

  3. Tulis pertanyaan jpql atau sql tersuai yang besar untuk mendapatkan subset tertentu bagi kejadian dan kejadian b yang berkaitan.

Saya tidak suka kaedah pertama sama sekali kerana ia mendapatkan banyak baris yang tidak perlu. Pendekatan ketiga mungkin adalah yang terbaik untuk struktur kompleks, tetapi mengapa saya menggunakan struktur orm di tempat pertama?

Secara teori semua ini sepatutnya berfungsi, saya sedang menggunakan kaedah kedua tetapi saya mempunyai kebimbangan. Adakah berbahaya untuk membuat beberapa panggilan repositori ke repositori yang berbeza untuk satu permintaan? Kerana saya mempunyai struktur entiti yang kompleks dengan banyak perhubungan. Saya rasa ini akan meningkatkan bilangan perjalanan pergi dan balik ke pangkalan data.

Adakah cara lain yang lebih sesuai untuk menyelesaikan masalah ini?

Penyelesaian

Saya rasa anda boleh menggunakan unjuran bersarang: Unjuran

public interface awithfilteredblistprojection {

    long getid();

    list<bprojection> getfilteredblist();

    interface bprojection {
        string getsomepropertytousewhilefiltering();

        // add other properties from b that you want to include
    }
}
Salin selepas log masuk

Repositori

public interface ARepository extends JpaRepository<A, Long> {

    @Query("SELECT a FROM A a JOIN FETCH a.bList b WHERE a.id = :aId")
    Optional<AWithFilteredBListProjection> findAWithFilteredBList(@Param("aId") Long aId);
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula perhubungan entiti terhad menggunakan Spring JPA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan