Heim  >  Artikel  >  Java  >  Warum werden meine Update-Anweisungen in Spring Data JPA nicht geleert?

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 13:54:30601Durchsuche

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>

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!

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