web-dev-qa-db-fra.com

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 fonctionnera uniquement avec l'annotation @Modifying. Mais quelle est la nécessité pour l'annotation ici? Pourquoi ne peut-on pas analyser la requête et comprendre qu’il s’agit d’une requête modificatrice?

27
Artyom Emelyanenko

Cela déclenchera la requête annotée à la méthode en tant que requête de mise à jour au lieu d'une requête en sélection. Comme EntityManager peut contenir des entités obsolètes après l'exécution de la requête de modification, nous le supprimons automatiquement (voir JavaDoc de EntityManager.clear () pour plus de détails). Cela supprimera effectivement toutes les modifications non vidées encore en attente dans EntityManager. Si vous ne souhaitez pas que EntityManager soit effacé automatiquement, vous pouvez définir l'attribut clearAutomatically de l'annotation @Modifying annotation sur 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

26
Anshul Sharma

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

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

0
Kusal Dissanayake