Maison >Java >javaDidacticiel >Pourquoi mes instructions de mise à jour ne sont-elles pas vidées dans Spring Data JPA ?

Pourquoi mes instructions de mise à jour ne sont-elles pas vidées dans Spring Data JPA ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 13:54:30684parcourir

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

Les déclarations de mise à jour ne sont pas vidées ?

L'annotation @Query de Spring Data JPA permet d'exécuter des requêtes personnalisées. Dans l'extrait de code fourni, une requête @Modifying est utilisée pour mettre à jour une entité Admin. Cependant, les modifications apportées via cette requête ne sont pas conservées dans la base de données.

Le rôle du vidage

Par défaut, EntityManager ne vide pas automatiquement les modifications. Cela signifie que les modifications apportées via une requête @Modifying ne seront reflétées que dans le cache local d'EntityManager, mais elles ne seront pas conservées dans la base de données jusqu'à ce que EntityManager soit explicitement vidé.

Solution : forcer le vidage.

Pour garantir que les modifications apportées via les requêtes @Modifying sont conservées dans la base de données, ajoutez l'option clearAutomatically = true à l'annotation @Modifying. Cela forcera EntityManager à vider automatiquement les modifications après chaque opération d'écriture, garantissant ainsi que la base de données est mise à jour immédiatement.

Requête modifiée :

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

Requête supplémentaire Considérations :

  • Utilisation de la gestion des transactions : Les transactions garantissent que les modifications apportées à la base de données sont atomiques et cohérentes. Entourez les appels aux requêtes @Modifying avec une transaction pour garantir que les mises à jour sont conservées avec succès.
  • Utilisation de la méthode Flush : La méthode AndFlush peut également être utilisée pour vider explicitement les modifications apportées à la base de données. Cette méthode peut être utilisée après l'exécution de toute requête modifiant la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn