BackEnd : Spring/SpringBoot

[SpringBoot] JpaRepository @Modifying, @Transactional

snoony 2024. 7. 2. 21:55
public interface RecCampListRepository extends JpaRepository<RecCampList, Integer> {
    @Query("SELECT rc FROM RecCampList rc WHERE rc.user.id = :userId")
    List<RecCampList> getByUser(@Param("userId") String userId);

    @Query("SELECT rc FROM RecCampList rc WHERE rc.doNm = :doNm and rc.user.id = :userId")
    List<RecCampList> getByDoNmAndUser(@Param("userId") String userId, @Param("doNm") String doNm);

    @Modifying
    @Transactional
    @Query("DELETE FROM RecCampList rc WHERE rc.user.id = :userId")
    void deleteByUser(@Param("userId") String userId);
}

 

  • @Modifying 어노테이션: DELETE, UPDATE 등의 DML 쿼리를 실행할 때는 반드시 @Modifying 어노테이션을 추가해야 합니다. 이 어노테이션은 Spring Data JPA에게 이 쿼리가 데이터 수정용임을 알립니다.
  • @Transactional 어노테이션: 데이터 수정 쿼리를 실행할 때는 트랜잭션이 필요합니다. 따라서 @Transactional 어노테이션을 추가하여 해당 메서드를 트랜잭션으로 실행되도록 합니다.