수정 기능을 구현할 때 특정 컬럼의 필드 값만 수정하고 save()를 했었다. 그런데 로그에 찍힌 쿼리문을 확인해보니 전체 컬럼에 대해 update를 했다. JPA는 update 할 때 모든 컬럼을 update 한다고 한다.
이럴 때 @DynamicUpdate
를 Entity에 붙이면 변경된 값만 update 할 수 있다.
하지만 이를 사용하면 성능 오버헤드가 있다고 한다.
언제 사용해야 하는 것이 좋냐면
엔티티에 많은 컬럼이 있고 컬럼 중 몇 개만 자주 update 해야 하는 경우다. 또한 버전 없는 낙관적 잠금을 사용할 때 @DynamicUpdate
를 사용해야 한다.
컬럼이 많이 없는데도 코드가 몇 줄 줄어들 것 같아서 @DynamicUpdate
를 사용하려 했는데 성능상 오버헤드가 있다고 하니 사용하지 말아야겠다...
버전 없는 낙관적 잠금??
https://reiphiel.tistory.com/entry/understanding-jpa-lock