PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Warisan JPA @EntityGraph menyertakan asosiasi opsional dari subkelas

Anda hanya dapat menggunakan EntityGraph jika atribut asosiasi adalah bagian dari superclass dan dengan itu juga bagian dari semua subclass. Jika tidak, EntityGraph akan selalu gagal dengan Exception yang Anda dapatkan saat ini.

Cara terbaik untuk menghindari masalah pemilihan N+1 Anda adalah dengan membagi kueri Anda menjadi 2 kueri:

Kueri pertama mengambil MCValue entitas menggunakan EntityGraph untuk mengambil asosiasi yang dipetakan oleh selected atribut. Setelah kueri itu, entitas ini kemudian disimpan dalam cache level 1 Hibernate/konteks persistensi. Hibernate akan menggunakannya saat memproses hasil kueri ke-2.

@Query("SELECT m FROM MCValue m") // add WHERE clause as needed ...
@EntityGraph(attributePaths = {"selected"})
public List<MCValue> findAll();

Kueri ke-2 kemudian mengambil Answer entitas dan menggunakan EntityGraph untuk juga mengambil Value . terkait entitas. Untuk setiap Value entitas, Hibernate akan membuat instance subkelas tertentu dan memeriksa apakah cache level 1 sudah berisi objek untuk kelas itu dan kombinasi kunci utama. Jika demikian, Hibernate menggunakan objek dari cache level 1, bukan data yang dikembalikan oleh kueri.

@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();

Karena kami telah mengambil semua MCValue entitas dengan selected yang terkait entitas, kita sekarang mendapatkan Answer entitas dengan value . yang diinisialisasi asosiasi. Dan jika asosiasi berisi MCValue entitas, selected asosiasi juga akan diinisialisasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_query_params mengembalikan kesalahan:pesan ikat memasok 2 parameter, tetapi pernyataan yang disiapkan membutuhkan 1

  2. Batas waktu kueri di pg-promise

  3. Django + PostgreSQL:membuat database (hak istimewa apa yang diberikan)

  4. org.postgresql.util.PSQLException:Indeks kolom di luar jangkauan:3, jumlah kolom:2

  5. Mengubah tipe kolom menjadi string yang lebih panjang di Rails