해결된 질문
작성
·
250
1
jpa를 이용해 게시판을 만들고 있는 중 입니다.
저는 repository 계층을 인터페이스에 JpaRepository를 상속해서 사용하고 있는데 수정 작업 시
영속이나 준영속 신경 안 쓰고 무조건 save로 데이터를 처리하는건 좋지않은 방법인가요?
답변 2
3
안녕하세요. 이시열님
JPA에서 데이터 변경은 변경 감지를 통해서 하는 것이 맞습니다.
예를 들어서 다음 로직을 보시면, 왜 변경감지를 통해서 문제를 해결해야 하는지 이해가 되실꺼에요.
@Transactional
public void logic(Long id, String username, boolean updateFlag) {
Member member = em.find(Member.class, id);
member.setUsername(username);
if(updateFlag) {
repository.save(member);
}
}
이렇게 되어 있을 때 이 메서드를 외부에서 다음과 같이 호출하면 어떻게 될까요?
logic(1, "change", true); //업데이트 되기를 기대
logic(1, "change", false); //업데이트 되지 않기를 기대
결과는 둘다 업데이트가 되어 버립니다. save 호출 여부와 무관하게 변경 감지가 동작하기 때문입니다.
정리하면 JPA를 사용하면 특별한 경우를 제외하고는 변경감지를 기준으로 개발해야 합니다.
감사합니다.
1