티스토리 뷰

dev_note/TIL

@Modifying 알아보기

jjoylee 2022. 6. 26. 19:23

@Query 어노테이션을 향상시켜 SELECT 쿼리 뿐 아니라 INSERT, UPDATE, DELETE, DDL 쿼리를 실행시킬 수 있게 해준다.

DML, DDL @Query에 @Modifying을 선언하지 않으면 InvalidDataAccessApiUsageException이 발생한다.

 

📌 영속성 컨텍스트 관리를 위한 속성

clearAutomatically ( 기본 값 = false )

false → DML 쿼리를 실행(실행 후 flush()) 해도 영속성 컨텍스트의 데이터는 DML 쿼리 실행 전의 데이터다.

즉, 실제 DB의 데이터와 영속성 컨텍스트의 엔티티 데이터가 일치하지 않게 된다.

후에 데이터를 조회할 때도 1차 캐시의 데이터를 조회하기 때문에 주의가 필요하다.

 

true → DML 쿼리를 실행한 후 영속성 컨텍스트를 clear() 한다.

즉, DML 쿼리 실행 후 find() 메서드로 데이터를 조회하려 할 때 다시 DB에서 데이터를 조회한다.

 

flushAutomatically( 기본 값 = false )

쿼리 실행 전에 flush 여부를 설정하기 위한 속성이다.

이 속성의 기본 값은 false다. 그러나 실제로 코드를 실행해보면 기본 값이 false 임에도 쿼리 실행 전에 데이터가 flush()된다.

그 이유는 SpringDataJpa의 구현체 Hibernate의 flushModeType의 기본 값이 AUTO 아기 때문이다.

 

flushModeType

AUTO : 쿼리 실행 시 flush

COMMIT : 트랜잭션 commit 시점에 flush

 

📌 Reference 

https://joojimin.tistory.com/71?category=1045906 

https://www.baeldung.com/spring-data-jpa-modifying-annotation

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함