복붙노트

[SPRING] 왜 우리는 Data Jpa에서 질의를 위해 @Modifying 어노테이션을 사용해야 만 하는가?

SPRING

왜 우리는 Data Jpa에서 질의를 위해 @Modifying 어노테이션을 사용해야 만 하는가?

예를 들어 데이터베이스에서 사용자를 삭제하는 CRUD 인터페이스에 다음과 같은 메소드가 있습니다.

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);
}

이 방법은 주석 @Modifying에서만 작동합니다. 하지만 여기에 특수 효과에 대한 필요성은 무엇입니까? 캔트 스프링이 쿼리를 분석하고 그것이 수정 쿼리라고 이해하는 이유는 무엇입니까?

해결법

  1. ==============================

    1.그러면 메서드에 주석이 달린 쿼리가 선택 쿼리 대신 업데이트 쿼리로 트리거됩니다. EntityManager는 수정 쿼리를 실행 한 후에 오래된 엔티티를 포함 할 수 있으므로 자동으로 삭제합니다 (자세한 내용은 JavaDoc의 EntityManager.clear ()를 참조하십시오). 이렇게하면 EntityManager에서 아직 보류중인 플러시되지 않은 모든 변경 사항을 효과적으로 삭제할 수 있습니다. EntityManager를 자동으로 지우지 않으려면 @Modifying 주석의 clearAutomatically 속성을 false로 설정할 수 있습니다.

    그러면 메서드에 주석이 달린 쿼리가 선택 쿼리 대신 업데이트 쿼리로 트리거됩니다. EntityManager는 수정 쿼리를 실행 한 후에 오래된 엔티티를 포함 할 수 있으므로 자동으로 삭제합니다 (자세한 내용은 JavaDoc의 EntityManager.clear ()를 참조하십시오). 이렇게하면 EntityManager에서 아직 보류중인 플러시되지 않은 모든 변경 사항을 효과적으로 삭제할 수 있습니다. EntityManager를 자동으로 지우지 않으려면 @Modifying 주석의 clearAutomatically 속성을 false로 설정할 수 있습니다.

    자세한 내용은 다음 링크를 참조하십시오.

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

  2. ==============================

    2.@Modifying 주석이 필요한 쿼리에는 INSERT, UPDATE, DELETE 및 DDL 문이 포함됩니다.

    @Modifying 주석이 필요한 쿼리에는 INSERT, UPDATE, DELETE 및 DDL 문이 포함됩니다.

    @Modifying 주석을 추가하면 쿼리가 SELECT 쿼리가 아님을 나타냅니다.

  3. from https://stackoverflow.com/questions/43665090/why-do-we-have-to-use-modifying-annotation-for-queries-in-data-jpa by cc-by-sa and MIT license