Maison > Java > javaDidacticiel > Pourquoi My Spring Data JPA @Query Update ne met-il pas à jour les données ?

Pourquoi My Spring Data JPA @Query Update ne met-il pas à jour les données ?

Susan Sarandon
Libérer: 2024-10-25 17:42:02
original
474 Les gens l'ont consulté

Why is My Spring Data JPA @Query Update Not Updating Data?

Mise à jour JPA des données Spring @Query ne mettant pas à jour les données

Malgré une requête de mise à jour définie :

<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>
Copier après la connexion

et en essayant de l'utiliser dans un test d'intégration :

<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>
Copier après la connexion

les champs de la base de données restent leurs valeurs initiales, provoquant l'échec du test. Même l'ajout d'un vidage avant la requête findOne :

<code class="java">adminRepository.flush();</code>
Copier après la connexion

ne résout pas le problème.

L'instruction de mise à jour peut être observée dans les journaux, indiquant que Spring Data génère et exécute le requête correctement. Cependant, les résultats de la requête findOne ultérieure ne sont pas cohérents avec les modifications apportées par la mise à jour.

Une raison possible de ce comportement est que EntityManager ne vide pas automatiquement les modifications par défaut. Pour résoudre ce problème, l'option clearAutomatically peut être ajoutée à l'annotation @Modifying :

<code class="java">@Modifying(clearAutomatically = true)
@Query("UPDATE Admin SET ...")
public void update(...);</code>
Copier après la connexion

Cela devrait amener EntityManager à vider automatiquement toutes les modifications en attente après l'exécution de la requête de mise à jour, garantissant ainsi que les modifications sont conservées et reflétées. dans les requêtes ultérieures.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal