70 votes

pourquoi devons-nous utiliser l'annotation @Modifying pour les requêtes dans Data Jpa

par exemple, j'ai une méthode dans mon interface CRUD qui supprime un utilisateur de la base de données:

 public interface CrudUserRepository extends JpaRepository<User, Integer> {

    @Transactional
    @Modifying
    @Query("DELETE FROM User u WHERE u.id=:id")
    int delete(@Param("id") int id, @Param("userId") int userId);
}
 

Cette méthode ne fonctionnera qu'avec l'annotation @Modifying. Mais quelle est la nécessité de l'annotation ici? Pourquoi ne peut-il pas analyser la requête et comprendre qu'il s'agit d'une requête modificative?

50voto

Anshul Sharma Points 2420

Cela va déclencher la requête annoté à la méthode de l'actualisation de la requête au lieu d'une sélection d'un seul. Comme l'EntityManager peut contenir obsolète entités après l'exécution de la modification de la requête, nous effacer automatiquement (voir JavaDoc de l'EntityManager.clear() pour plus de détails). Cela aura pour effet de chute de tous les non-rincé changements encore en suspens dans l'EntityManager. Si vous ne souhaitez pas l'EntityManager à être effacé automatiquement, vous pouvez définir @la Modification de l'annotation du clearAutomatically attribut false;

pour plus de détails, vous pouvez suivre ce lien:-

http://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html

10voto

Kusal Dissanayake Points 293

Les requêtes qui nécessitent une annotation @Modifying incluent les instructions INSERT, UPDATE, DELETE et DDL.

L'ajout d'annotations @Modifying indique que la requête ne concerne pas une requête SELECT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X