본문 바로가기

Java Spring Boot

@Modifying , @Transactional

 

@Modifying : @Query 어노테이션을 통해 작성된 insert,update,delete쿼리에서 사용되는 어노테이션이다.

1.@Query에 벌크 연산 쿼리를 작성하고 , @Modifying을 붙이지 않으면 오류가 발생한다 .

2. 벌크연산 : 단건 Update , delete 연산을 제외한 다건의 update,delete연산을 하나의 쿼리로 하는것을 의미함

@Transactional : 데이터베이스에 상태를 변환시키는 하나의 논리적인 기능을 수행하기 위한 작업의 단위 또는 일련의 연산을 뜻한다

1. 단순 쿼리문이라면 괜찮지만 여러 쿼리문으로 인해 데이터의 부정합이 발생하는 경우 해당 어노테이션을 사용하게되면 원래 상태로 원상 복귀하게 된다.

2. jpa에서 트랜잭션이 끝나는 시점에 변화가 생긴 모든 엔티티들을 데이터베이스에 자동으로 반영해준다 .

3. 2번의 이유가 jpa에서 dirty checking(상태 변경 검사)를 하게되는데 해당 검사가 transaction commit이 될때 작동을 하게된다 . 그렇기에 해당 어노테이션을 써서 트랜잭션이 실행이 되도록한다

@PathVariable : 해당 어노테이션을 사용하여 요청 URI매핑에서 템플릿 변수를 처리하고 이를 메서드 매개변수로 사용할수 있다.

@Transactional
  @Modifying
  @Query("UPDATE CellGatheringEntity cg SET cg.isValid = false,
  cg.updatedBy = :memberId WHERE cg.cellGatheringId = :cellGatheringId")
  void deleteCellGatheringByCellGatheringId(
       @Param("memberId") Long memberId, @Param("cellGatheringId") Long cellGatheringId);

 

[출처] Spring boot 개발일지 @Modifying , @Transactional (12월 17일)|작성자 공부하는 개발자