Heim >Java >javaLernprogramm >Warum aktualisiert mein Spring Data JPA @Query Update keine Daten?

Warum aktualisiert mein Spring Data JPA @Query Update keine Daten?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 17:42:02476Durchsuche

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

Spring Data JPA Update @Query aktualisiert keine Daten

Obwohl eine Aktualisierungsabfrage definiert ist:

<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>

und Versuch, es in einem Integrationstest zu verwenden:

<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>

Die Felder in der Datenbank behalten ihre Anfangswerte bei, was dazu führt, dass der Test fehlschlägt. Selbst das Hinzufügen eines Flushs vor der findOne-Abfrage:

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

behebt das Problem nicht.

Die Update-Anweisung kann in den Protokollen beobachtet werden, was darauf hinweist, dass Spring Data die generiert und ausführt richtig abfragen. Die Ergebnisse der nachfolgenden findOne-Abfrage stimmen jedoch nicht mit den durch das Update vorgenommenen Änderungen überein.

Ein möglicher Grund für dieses Verhalten ist, dass der EntityManager Änderungen standardmäßig nicht automatisch leert. Um dieses Problem zu beheben, kann der @Modifying-Annotation die Option „clearAutomatically“ hinzugefügt werden:

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

Dies sollte dazu führen, dass der EntityManager nach der Ausführung der Aktualisierungsabfrage automatisch alle ausstehenden Änderungen leert, um sicherzustellen, dass die Änderungen beibehalten und widergespiegelt werden in nachfolgenden Abfragen.

Das obige ist der detaillierte Inhalt vonWarum aktualisiert mein Spring Data JPA @Query Update keine Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn