Rumah  >  Artikel  >  Java  >  Mengapa Kenyataan Kemas Kini Saya Tidak Membilas dalam JPA Data Spring?

Mengapa Kenyataan Kemas Kini Saya Tidak Membilas dalam JPA Data Spring?

Barbara Streisand
Barbara Streisandasal
2024-10-26 13:54:30601semak imbas

Why Are My Update Statements Not Flushing in Spring Data JPA?

Kemas kini Pernyataan Tidak Membilas?

Anotasi @Query Data Musim Bunga JPA membenarkan pertanyaan tersuai dilaksanakan. Dalam coretan kod yang disediakan, pertanyaan @Modifying digunakan untuk mengemas kini entiti Pentadbir. Walau bagaimanapun, perubahan yang dibuat melalui pertanyaan ini tidak diteruskan ke pangkalan data.

Peranan Flushing

Secara lalai, EntityManager tidak mengepam perubahan secara automatik. Ini bermakna bahawa perubahan yang dibuat melalui pertanyaan @Modifying hanya akan ditunjukkan dalam cache setempat EntityManager, tetapi ia tidak akan diteruskan ke pangkalan data sehingga EntityManager disiram secara eksplisit.

Penyelesaian: Force Flushing

Untuk memastikan perubahan yang dibuat melalui pertanyaan @Modifying dikekalkan pada pangkalan data, tambahkan pilihan clearAutomatically = true pada anotasi @Modifying. Ini akan memaksa EntityManager untuk membuang perubahan secara automatik selepas setiap operasi tulis, memastikan pangkalan data dikemas kini dengan segera.

Pertanyaan Diubahsuai:

<code class="java">@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, @Param("login") String login, @Param("superAdmin") boolean superAdmin, @Param("preferenceAdmin") boolean preferenceAdmin, @Param("address") String address, @Param("zipCode") String zipCode, @Param("city") String city, @Param("country") String country, @Param("email") String email, @Param("profile") String profile, @Param("postLoginUrl") String postLoginUrl, @Param("id") Long id);</code>

Tambahan Pertimbangan:

  • Menggunakan Pengurusan Transaksi: Transaksi memastikan perubahan yang dibuat pada pangkalan data adalah atom dan konsisten. Sekeliling panggilan ke @Mengubah suai pertanyaan dengan transaksi untuk memastikan kemas kini diteruskan dengan jayanya.
  • Menggunakan Kaedah Flush: Kaedah AndFlush juga boleh digunakan untuk mengepam perubahan pada pangkalan data secara eksplisit. Kaedah ini boleh digunakan selepas melaksanakan sebarang pertanyaan yang mengubah suai pangkalan data.

Atas ialah kandungan terperinci Mengapa Kenyataan Kemas Kini Saya Tidak Membilas dalam JPA Data Spring?. 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