[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.그러면 메서드에 주석이 달린 쿼리가 선택 쿼리 대신 업데이트 쿼리로 트리거됩니다. 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.@Modifying 주석이 필요한 쿼리에는 INSERT, UPDATE, DELETE 및 DDL 문이 포함됩니다.
@Modifying 주석이 필요한 쿼리에는 INSERT, UPDATE, DELETE 및 DDL 문이 포함됩니다.
@Modifying 주석을 추가하면 쿼리가 SELECT 쿼리가 아님을 나타냅니다.
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
'SPRING' 카테고리의 다른 글
[SPRING] 사양 및 Pageable을 함께 사용하는 경우 카운트를 비활성화하는 방법은 무엇입니까? (0) | 2019.03.15 |
---|---|
[SPRING] 최대 절전 모드, 스프링 및 SLF4J 바인딩 (0) | 2019.03.15 |
[SPRING] Spring Hibernate 템플릿은 오라클의 계산 쿼리에서 어떤 객체 유형을 반환합니까? (0) | 2019.03.15 |
[SPRING] 하나의 컨텍스트에서 Spring bean을 다른 컨텍스트의 mock 버전으로 대체하십시오. (0) | 2019.03.15 |
[SPRING] 404 오류가있는 봄 보안 문제가 있습니까? (0) | 2019.03.15 |