JPA를 이용한 프로젝트를 진행도중 수정은 어떻게 되나 궁금해졌다
JPA의 같은 경우엔 엔티티 매니저가 엔티티를 저장/조회/수정/삭제를 합니다
그런데 엔티티 매니저의 메서드를 찾아보면 수정에 해당하는 메서드가 없는데 어떻게 수정이 이루어지는 걸까?
방법은 더티 체킹으로 인해 수정이 진행된다.
더티 체킹은 서비스의 Transaction 안에서 엔티티의 변경이 일어나면 변갱내용을 자동으로 데이터베이스에 반영이 된다... 매우 놀라웠다..
더티 체킹이 일어나는 환경 조건
1. 영속 상태(Managed) 안에 있는 엔티티인 경우
2. Transaction 안에서 엔티티를 변경하는 경우
public void reConfirm(String title, String content, List<StudyConfirmationFile> files) {
require(isNotBlank(title));
require(isNotBlank(content));
require(nonNull(files));
check(this.status != CONFIRMED);
this.title = title;
this.content = content;
this.files = files;
this.status = CREATED;
}
}
해당 로직은 수정사항이 생겨 재인증이 필요할때 만든 로직인데, 인스턴스 변수의 변경이 일어나면 더티 체킹이 일어나 변경이 된다