Rumah  >  Artikel  >  Java  >  Mengapa Kemas Kini JPA @Query Data Spring Saya Tidak Berfungsi: EntityManager Flush Mystery?

Mengapa Kemas Kini JPA @Query Data Spring Saya Tidak Berfungsi: EntityManager Flush Mystery?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 07:10:29169semak imbas

Why Does My Spring Data JPA @Query Update Not Work: The EntityManager Flush Mystery?

Kemas Kini JPA Data Musim Bunga @Query Tidak Mengemas kini: Dilema Flush

Apabila menggunakan anotasi @Query untuk operasi kemas kini dalam Spring Data JPA, ia adalah penting untuk memahami tingkah laku EntityManager. Secara lalai, EntityManager tidak secara automatik membuang perubahan pada pangkalan data. Ini boleh membawa kepada hasil yang tidak dijangka, di mana kemas kini kelihatan diabaikan.

Dalam kes kod yang diberikan, ujian penyepaduan gagal kerana perubahan yang dibuat pada entiti Pentadbir tidak dibuang ke pangkalan data selepas pertanyaan kemas kini . Untuk menyelesaikan isu ini, adalah disyorkan untuk menggunakan pilihan clearAutomatically = true dengan anotasi @Modifying:

@Modifying(clearAutomatically = true)
@Transactional
@Query("UPDATE Admin SET firstname = :firstname, lastname = :lastname, login = :login, superAdmin = :superAdmin, preferenceAdmin = :preferenceAdmin, address =  :address, zipCode = :zipCode, city = :city, country = :country, email = :email, profile = :profile, postLoginUrl = :postLoginUrl WHERE id = :id")
public void update(@Param("firstname") String firstname, @Param("lastname") String lastname, ...);

Dengan menambahkan pilihan ini, EntityManager akan secara automatik mengepam perubahan selepas pertanyaan kemas kini dilaksanakan, memastikan bahawa mereka diteruskan ke pangkalan data.

Pemerhatian Tambahan:

  • Klausa had 2 yang dilihat dalam pernyataan SQL untuk pencari findByEmail dan findByLogin ialah pangkalan data- tingkah laku tertentu apabila menggunakan klausa mengehadkan dengan pertanyaan WHERE IN. Spring Data menggunakan gelagat ini untuk mengoptimumkan pertanyaan berdasarkan maklumat yang diperolehi.
  • Perbezaan antara gelagat dalam MySQL dan Java mungkin berkaitan dengan penggunaan pemacu JDBC atau tetapan sambungan yang berbeza. Memastikan ketekalan antara tetapan pemacu dan sambungan yang digunakan dalam kedua-dua persekitaran adalah penting.

Atas ialah kandungan terperinci Mengapa Kemas Kini JPA @Query Data Spring Saya Tidak Berfungsi: EntityManager Flush Mystery?. 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