현재 프로젝트에서 부모 엔티티 삭제시 자식 엔티티를 null 처리 해줘야 했는데..
자식 엔티티를 모두 조회후 update 쿼리를 날리기에는 데이터가 매우 많을 수 있어 bulk update JPQL을 통해 null 처리를 진행했다.
Schedule
테이블의 hours
칼럼을 null로 UPDATE
하도록 JPQL을 작성했다.
@Modifying
어노테이션은 @Query
어노테이션으로 작성된 INSERT, UPDATE, DELETE 쿼리를 사용할 때 함께 사용해주어야 한다.
이때 return 타입은 void
, int
, Integer
으로 지정할 수 있다.
여기서 clearAutomatically = true
옵션을 주었는데 defualt값은 false
이다.
해당 옵션을 주지 않으면 @Modifying
과 @Query
를 사용한 연산 수행후에 1차 캐시가 업데이트되지 않고 그 내용을 읽어오기 때문에 UPDATE전 데이터를 읽어올 수 있다.
해당 옵션을 주게되면 영속성 컨텍스트를 clear()
해 주기 때문에 이후 엔티티 조회시에는 다시 데이터베이스에서 조회해오게 된다.