Maison >Java >javaDidacticiel >Pourquoi mes instructions de mise à jour ne sont-elles pas vidées dans 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 :
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!