Pas de mise à jour à l'aide de Spring Data JPA @Query
Dans Spring Data JPA, la requête de mise à jour fournie ne parvient pas à mettre à jour l'entité, ce qui entraîne un échec du test.
Malgré la mise en œuvre des modifications requises dans la requête pour utiliser les valeurs paramétrées, les champs mis à jour restent inchangés, conservant leurs valeurs initiales. L'ajout d'une opération de vidage juste avant l'opération de recherche ne résout pas non plus le problème.
En examinant l'instruction SQL générée, vous remarquez que la requête de mise à jour est correctement exécutée, mais la requête récupérant l'entité modifiée semble être ignoré. Cela suggère un problème potentiel de mise en cache.
Cependant, lors de l'ajout d'appels à d'autres chercheurs, les valeurs mises à jour sont reflétées dans les objets récupérés. Ce comportement est incohérent et inattendu.
De plus, l'instruction SQL récupérant l'entité modifiée inclut une clause limite 2, bien qu'il soit supposé que Spring Data devrait toujours utiliser une clause limite 1 lors du renvoi d'un seul objet.
Fait intéressant, lors de l'exécution manuelle des instructions SQL générées dans un client MySQL, la logique fonctionne parfaitement, ce qui soulève la question de savoir pourquoi ce comportement n'est pas systématiquement reflété au niveau Java.
La cause première de ce problème réside dans le comportement par défaut d'EntityManager, qui n'efface pas automatiquement les modifications. Pour le résoudre, l'option clearAutomatically doit être activée dans l'annotation @Modifying, garantissant que les modifications sont vidées immédiatement après la requête de mise à jour.
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!