Heim >Java >javaLernprogramm >Warum aktualisiert mein Spring Data JPA @Query Update keine Daten?
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!