Spring JPA [활용] 변경감지와 병합(merge)

신재원·2023년 1월 20일
0

Spring JPA 활용

목록 보기
6/18

정말 중요한 내용이다.

준영속 엔티티 ?

  • 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다
    수정을 시도하는 객체다,
  • 객체는 이미 DB에 한번 저장되어서 식별자가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼수 있다.
  • JPA가 자동으로 업데이트를 해주지 않는다. (new 객체로 생성할경우)

변경 감지 == dirty checking

  • JPA에서 데이터를 변경할때 기본적인 메커니즘 이다.

준영속 엔티티를 수정하는 2가지 방법

변경 감지 == dirty checking 기능 사용 (권장하는 방법)

  • @Transactional에 의해 JPA에서 Flush를 날려 영속성 Entity에서 변경이 된 점을 찾아 업데이트 쿼리를 자동으로 날린다.

병합 (merge) 사용 ( !! 쓰지 않는다 )

  • new 객체를 생성하여 구현했음으로, em.merge를 사용해 Repository에 save 후 merge의 로직을 짜줘야된다.
    • 병합 사용시 주의점 : 병합시 Parameter에 값이 없으면 "null" 로 업데이트 할 위험이 있다. (병합은 모든 필드를 교체한다)

정리

  1. 병합 사용 X , 변경 감지를 사용한다.
  2. 컨트롤러에서 어설프게 엔티티를 생성하지 않는다.
  3. 트랜잭션이 있는 서비스 계층에서 입력받을 Parameter가 많을경우 Dto 클래스를 만들어 Parameter 로직을 구현한다.

0개의 댓글