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!