• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

변경감지에 대해 질문 있습니다.

20.11.21 15:19 작성 조회수 189

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

이시열님의 프로필

이시열

질문자

2020.11.22

예시를 보니까 쉽게 이해가 됐습니다.

본업도 바쁘실텐데 이렇게 예제까지 적으며 설명해 주셔서 정말 감사드립니다. ^^