본문 바로가기

Java/Spring

[JPA] @Query update문 (Not supported for DML operations 해결) update retyrn 받는법

여지껏 mybatis만 사용하다가 이번에 프로젝트를 진행하면서 JPA를 사용하기로 결정했다.

 

JPA에선 @DynamicUpdate 를 이용해서 dirty checking을 하며 바뀐 값만을 update 해준다.

 

수정 시간도 자동으로 넣어줄 수 있어서 매우 편리하고 깔끔하다.

 

하지만 dirty check를 사용하기 때문에 mybatis처럼 return 값을 받을 수가 없다.

실패했는지 성공했는지, update가 진행 됐는지, 진행이 됐다면 몇 행이 수정됐는지 등을 알 수가 없다.

하여 이부분을 찾다가 dirtycheck로는 무리가 있다고 판단. 쿼리를 직접 짜보기로했다.

 

========= 본론 ==========

public interface UserProfileRepository extends JpaRepository<UserProfileEntity, Integer> {
    @Modifying
    @Query("update UserProfile set profileImg = :profile where userSeq=297")
    int updateAll(@Param("profile") String profile);
}

테스트용이라 그냥 대충 짰다.

이렇게하면 return 값으로 업데이트된 행 갯수를 받을 수 있다.

 

설명 >>

UserProfile은 entity에 설정한 Entity name 이다.

@Entity(name = "UserProfile")
@Table(name = "tb_user_profile")
public class UserProfileEntity {...}

 

 

참고로 다른 쿼리랑 다르게 @Modifying을 꼭 써줘야한다. @Query만 쓰면 Not supported for DML operations 에러가 발생한다.

@Modifying 역할에 대해서 추가로 알아 보고 추가해야겠다.

 

근데 나는 그냥 dirty check를 쓰려한다..