Dirty Checking(더티 체킹)

마동찬·2023년 9월 25일

JPA는 조회, 저장, 삭제에 대한 기능을 제공하지만, 수정에 대한 기능이 따로 존재하지않는다.

JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영해준다.

변화의 기준은 최초 조회 상태이다.

Dirty Checking은 Transaction 안에서 엔티티의 변경이 일어나면, 변경 내용을 자동으로 데이터베이스에 반영하는 JPA 특징이다.

[Controller]

@PutMapping("/test")
    public void update(){
        String name = "박영재" ;
            memberService.updateMemberInfo(name);
    }

[Service]

  @Transactional
    public void updateMemberInfo(String name) {
        Long id = 5L;
        Member member = memberRepository.findById(id).orElse(null);
        member.updateinfo(name);
    }

id=5 인 Member 데이터를 조회 해온후, 컨트롤러에서 받은 name 값을 넣어줘 업데이트를 해줬다.

이게 JPA의 더티체킹이다.

여기서 중요한건 @Transactional 을 써줘야한다.

@Transactional을 메소드 상단에 써주면, 해당 메소드를 트랜잭션으로 감싼다.

그래서 엔티티의 변경감지를 인지하고, jpa의 더티체킹이 가능해진다.


Ref. https://yjkim-dev.tistory.com/61

profile
새내기개발자 성장기록

0개의 댓글