본문 바로가기
Study/Spring

@Query로 update문 작성하기 | Spring Spring boot JPA 쿼리 어노테이션

by M개발자 2022. 4. 27.
반응형

Group 테이블과 User 테이블은 1:N 관계를 가지고 있습니다.

이미 생성되어있는 User 엔티티에 Group 엔티티의 정보를 업데이트하는 과정을 설명하고자 합니다.

 

public interface UserRepository extends CrudRepository<User, Long> {
    @Modifying
    @Transactional
    @Query(value = "UPDATE user_tb u set u.group_id = :groupId where u.user_id = :userId", nativeQuery = true)
    void updateGroupId(long groupId, long userId);
}

 

@Modifying

- SELECT가 아님을 명시하는 어노테이션입니다.

- UPDATE, DELETE, INSERT, DDL 문에서 사용할 수 있습니다. 

 

@Transactional

- UPDATE, DELETE 문에서는 표기해야 정상적으로 작동합니다. 

 

@Query(value = "UPDATE user_tb u set u.group_id = :groupId where u.user_id = :userId", nativeQuery = true)

!! 테이블명과 컬럼명은 엔티티의 이름이 아닌 데이터베이스에 적용된 이름으로 작성해야 합니다.

만약 @Table(name = "user_tb") 같이 name을 주었다면 name에 해당하는 이름으로 해야 합니다.

 

nativeQuery = true

- true이면 SQL을, false이면 JPQL을 나타냅니다. 기본값은 false입니다. 

 

:groupId

- 매개변수를 사용할 때에는 : 를 붙여 사용할 수 있습니다.

- 자바 8버전 이후로는 @Param을 작성하지 않아도 정상적인 동작이 가능해졌습니다.


Code

 

참고 글

https://jforj.tistory.com/90

https://yunassnn.tistory.com/19

반응형

댓글