Heim > Java > javaLernprogramm > Hauptteil

Warum werden meine Update-Anweisungen in Spring Data JPA nicht geleert?

Barbara Streisand
Freigeben: 2024-10-26 13:54:30
Original
600 Leute haben es durchsucht

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

Aktualisierungsanweisungen werden nicht geleert?

Die @Query-Annotation von Spring Data JPA ermöglicht die Ausführung benutzerdefinierter Abfragen. Im bereitgestellten Codeausschnitt wird eine @Modifying-Abfrage verwendet, um eine Admin-Entität zu aktualisieren. Die durch diese Abfrage vorgenommenen Änderungen werden jedoch nicht in der Datenbank gespeichert.

Die Rolle des Leerens

Standardmäßig löscht der EntityManager Änderungen nicht automatisch. Dies bedeutet, dass die durch eine @Modifying-Abfrage vorgenommenen Änderungen nur im lokalen Cache des EntityManagers widergespiegelt werden, aber nicht in der Datenbank gespeichert werden, bis der EntityManager explizit geleert wird.

Lösung: Leeren erzwingen

Um sicherzustellen, dass durch @Modifying-Abfragen vorgenommene Änderungen in der Datenbank beibehalten werden, fügen Sie der @Modifying-Annotation die Option „clearAutomatically = true“ hinzu. Dadurch wird der EntityManager gezwungen, Änderungen nach jedem Schreibvorgang automatisch zu löschen, um sicherzustellen, dass die Datenbank sofort aktualisiert wird.

Geänderte Abfrage:

<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>
Nach dem Login kopieren

Zusätzlich Überlegungen:

  • Transaktionsverwaltung verwenden: Transaktionen stellen sicher, dass an der Datenbank vorgenommene Änderungen atomar und konsistent sind. Umschließen Sie Aufrufe von @Modifying-Abfragen mit einer Transaktion, um sicherzustellen, dass die Aktualisierungen erfolgreich beibehalten werden.
  • Verwenden der Flush-Methode: Die AndFlush-Methode kann auch verwendet werden, um Änderungen explizit an der Datenbank zu löschen. Diese Methode kann nach der Ausführung einer beliebigen Abfrage verwendet werden, die die Datenbank ändert.

Das obige ist der detaillierte Inhalt vonWarum werden meine Update-Anweisungen in Spring Data JPA nicht geleert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!