Rumah  >  Artikel  >  Java  >  Mengapakah Data Spring Saya JPA @Query Update Tidak Mengemas kini Data?

Mengapakah Data Spring Saya JPA @Query Update Tidak Mengemas kini Data?

Susan Sarandon
Susan Sarandonasal
2024-10-25 17:42:02373semak imbas

Why is My Spring Data JPA @Query Update Not Updating Data?

Kemas Kini JPA Data Musim Bunga @Query Tidak Mengemas kini Data

Walaupun mempunyai pertanyaan kemas kini yang ditakrifkan:

<code class="java">@Modifying
@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(...);</code>

dan cuba menggunakannya dalam ujian penyepaduan:

<code class="java">adminRepository.update("Toto", "LeHeros", admin0.getLogin(), admin0.getSuperAdmin(), admin0.getPreferenceAdmin(), admin0.getAddress(), admin0.getZipCode(), admin0.getCity(), admin0.getCountry(), admin0.getEmail(), admin0.getProfile(), admin0.getPostLoginUrl(), admin0.getId());
Admin loadedAdmin = adminRepository.findOne(admin0.getId());
assertEquals("Toto", loadedAdmin.getFirstname()); // Assertion failed
assertEquals("LeHeros", loadedAdmin.getLastname()); // Assertion failed</code>

medan dalam pangkalan data kekal sebagai nilai awalnya, menyebabkan ujian gagal. Malah menambah flush sebelum pertanyaan findOne:

<code class="java">adminRepository.flush();</code>

tidak menyelesaikan isu.

Pernyataan kemas kini boleh diperhatikan dalam log, menunjukkan bahawa Spring Data sedang menjana dan melaksanakan pertanyaan dengan betul. Walau bagaimanapun, hasil pertanyaan findOne yang berikutnya tidak konsisten dengan perubahan yang dibuat oleh kemas kini.

Satu sebab yang mungkin untuk tingkah laku ini ialah EntityManager tidak membuang perubahan secara automatik secara lalai. Untuk menangani perkara ini, pilihan clearAutomatically boleh ditambahkan pada anotasi @Modifying:

<code class="java">@Modifying(clearAutomatically = true)
@Query("UPDATE Admin SET ...")
public void update(...);</code>

Ini sepatutnya menyebabkan EntityManager secara automatik mengepam semua perubahan yang belum selesai selepas melaksanakan pertanyaan kemas kini, memastikan bahawa perubahan itu berterusan dan ditunjukkan dalam pertanyaan seterusnya.

Atas ialah kandungan terperinci Mengapakah Data Spring Saya JPA @Query Update Tidak Mengemas kini Data?. 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