여지껏 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를 쓰려한다..
'Java > Spring' 카테고리의 다른 글
@JSONSETTER 이용 중 삽질 (0) | 2023.03.13 |
---|---|
yaml & * (0) | 2021.10.07 |
spring 2로 바꾸면서 Spring security로 인한 로그인창 없애고 custom 로그인 창으로 대체하기 (0) | 2020.10.22 |
[Spring] 스케쥴러 만들기 (0) | 2020.03.05 |